Shop OBEX P1 Docs P2 Docs Learn Events
Test Forum -> code formatting to HTML formatting — Parallax Forums

Test Forum -> code formatting to HTML formatting

SRLMSRLM Posts: 5,045
edited 2012-03-25 02:21 in General Discussion
1. To format your code in HTML, first use the SPIN -> BB FORUM formatter tool: http://www.phipi.com/format/
2. Post your code into a post somewhere and put the post up on the forums. Then view the page source and locate your code.
3. Copy your code between the < pre > < /pre > tags.
4. With the same original code, use the blogspot CODE -> HTML formatter tool: http://codeformatter.blogspot.com/
5. From the HTML from step 4, replace everything between the <pre> tags with the copied code from step 3

The advantage of this is that your HTML code post now has basic (ie bold keywords) code formatting.

Example forum post that has code from phipi code format:
___________________________________________________________________
'' From Parallax Inc. Propeller Education Kit - Objects Lab v1.1
{{
&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;
File: FullDuplexSerialPlus.spin
Version: 1.1
Copyright (c) 2008 Parallax, Inc.
See end of file for terms of use.

This is the FullDuplexSerial object v1.1 [b]from[/b] the Propeller Tool's Library
folder with modified documentation [b]and[/b] methods for converting text strings
into numeric values in several bases.

&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;

Note: used by Anzhelka project
}}
  
[b]CON[/b]                                          ''
''Parallax Serial Terminal Control Character Constants
''&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;
  HOME     =   1                             ''HOME     =   1          
  CRSRXY   =   2                             ''CRSRXY   =   2          
  CRSRLF   =   3                             ''CRSRLF   =   3          
  CRSRRT   =   4                             ''CRSRRT   =   4          
  CRSRUP   =   5                             ''CRSRUP   =   5          
  CRSRDN   =   6                             ''CRSRDN   =   6          
  BELL     =   7                             ''BELL     =   7          
  BKSP     =   8                             ''BKSP     =   8          
  TAB      =   9                             ''TAB      =   9          
  LF       =   10                            ''LF       =   10         
  CLREOL   =   11                            ''CLREOL   =   11         
  CLRDN    =   12                            ''CLRDN    =   12         
  CR       =   13                            ''CR       =   13         
  CRSRX    =   14                            ''CRSRX    =   14         
  CRSRY    =   15                            ''CRSRY    =   15         
  CLS      =   16                            ''CLS      =   16          


[b]VAR[/b]

  [b]long[/b]  cog                     'cog flag/id

  [b]long[/b]  rx_head                 '9 contiguous longs
  [b]long[/b]  rx_tail
  [b]long[/b]  tx_head
  [b]long[/b]  tx_tail
  [b]long[/b]  rx_pin
  [b]long[/b]  tx_pin
  [b]long[/b]  rxtx_mode
  [b]long[/b]  bit_ticks
  [b]long[/b]  buffer_ptr
                     
  [b]byte[/b]  rx_buffer[*16]           'transmit and receive buffers
  [b]byte[/b]  tx_buffer[*16]  


[b]PUB[/b] start(rxpin, txpin, mode, baudrate) : okay
  {{
  Starts serial driver in a new cog

    rxpin - input receives signals [b]from[/b] peripheral's TX pin
    txpin - output sends signals to peripheral's RX pin
    mode  - bits in this variable configure signaling
               bit 0 inverts rx
               bit 1 inverts tx
               bit 2 open drain/source tx
               bit 3 ignor tx echo on rx
    baudrate - bits per second
            
    okay - returns [b]false[/b] [b]if[/b] no cog is available.
  }}

  stop
  [b]longfill[/b](@rx_head, 0, 4)
  [b]longmove[/b](@rx_pin, @rxpin, 3)
  bit_ticks := clkfreq / baudrate
  buffer_ptr := @rx_buffer
  okay := cog := [b]cognew[/b](@entry, @rx_head) + 1


[b]PUB[/b] stop

  '' Stops serial driver - frees a cog

  [b]if[/b] cog
    [b]cogstop[/b](cog~ - 1)
  [b]longfill[/b](@rx_head, 0, 9)


[b]PUB[/b] tx(txbyte)

  '' Sends byte (may wait for room in buffer)

  [b]repeat[/b] [b]until[/b] (tx_tail <> (tx_head + 1) & $F)
  tx_buffer[*tx_head] := txbyte
  tx_head := (tx_head + 1) & $F

  [b]if[/b] rxtx_mode & %1000
    rx

[b]PUB[/b] rx : rxbyte

  '' Receives byte (may wait for byte)
  '' rxbyte returns $00..$FF

  [b]repeat[/b] [b]while[/b] (rxbyte := rxcheck) < 0

[b]PUB[/b] rxflush

  '' Flush receive buffer

  [b]repeat[/b] [b]while[/b] rxcheck => 0
    
[b]PUB[/b] rxcheck : rxbyte

  '' Check if byte received (never waits)
  '' rxbyte returns -1 if no byte received, $00..$FF if byte

  rxbyte--
  [b]if[/b] rx_tail <> rx_head
    rxbyte := rx_buffer[*rx_tail]
    rx_tail := (rx_tail + 1) & $F

[b]PUB[/b] rxtime(ms) : rxbyte | t

  '' Wait ms milliseconds for a byte to be received
  '' returns -1 if no byte received, $00..$FF if byte

  t := [b]cnt[/b]
  [b]repeat[/b] [b]until[/b] (rxbyte := rxcheck) => 0 [b]or[/b] ([b]cnt[/b] - t) / (clkfreq / 1000) > ms

[b]PUB[/b] [b]str[/b](stringptr)

  '' Send zero terminated string that starts at the stringptr memory address

  [b]repeat[/b] [b]strsize[/b](stringptr)
    tx([b]byte[/b][*stringptr++])

[b]PUB[/b] getstr(stringptr) | index
    '' Gets zero terminated string and stores it, starting at the stringptr memory address
    index~
    [b]repeat[/b] [b]until[/b] (([b]byte[/b][*stringptr][*index++] := rx) == 13)
    [b]byte[/b][*stringptr][*--index]~

[b]PUB[/b] dec(value) | i

'' Prints a decimal number

  [b]if[/b] value < 0
    -value
    tx("-")

  i := 1_000_000_000

  [b]repeat[/b] 10
    [b]if[/b] value => i
      tx(value / i + "0")
      value //= i
      [b]result[/b]~~
    [b]elseif[/b] [b]result[/b] [b]or[/b] i == 1
      tx("0")
    i /= 10


[b]PUB[/b] GetDec : value | tempstr[*11]

    '' Gets decimal character representation of a number from the terminal
    '' Returns the corresponding value

    GetStr(@tempstr)
    value := StrToDec(@tempstr)    

[b]PUB[/b] StrToDec(stringptr) : value | char, index, multiply

    '' Converts a zero terminated string representation of a decimal number to a value

    value := index := 0
    [b]repeat[/b] [b]until[/b] ((char := [b]byte[/b][*stringptr][*index++]) == 0)
       [b]if[/b] char => "0" [b]and[/b] char =< "9"
          value := value * 10 + (char - "0")
    [b]if[/b] [b]byte[/b][*stringptr] == "-"
       value := - value
       
[b]PUB[/b] bin(value, digits)

  '' Sends the character representation of a binary number to the terminal.

  value <<= 32 - digits
  [b]repeat[/b] digits
    tx((value <-= 1) & 1 + "0")

[b]PUB[/b] GetBin : value | tempstr[*11]

  '' Gets binary character representation of a number from the terminal
  '' Returns the corresponding value
   
  GetStr(@tempstr)
  value := StrToBin(@tempstr)    
   
[b]PUB[/b] StrToBin(stringptr) : value | char, index

  '' Converts a zero terminated string representaton of a binary number to a value
   
  value := index := 0
  [b]repeat[/b] [b]until[/b] ((char := [b]byte[/b][*stringptr][*index++]) == 0)
     [b]if[/b] char => "0" [b]and[/b] char =< "1"
        value := value * 2 + (char - "0")
  [b]if[/b] [b]byte[/b][*stringptr] == "-"
     value := - value
   
[b]PUB[/b] hex(value, digits)

  '' Print a hexadecimal number

  value <<= (8 - digits) << 2
  [b]repeat[/b] digits
    tx([b]lookupz[/b]((value <-= 4) & $F : "0".."9", "A".."F"))

[b]PUB[/b] GetHex : value | tempstr[*11]

    '' Gets hexadecimal character representation of a number from the terminal
    '' Returns the corresponding value

    GetStr(@tempstr)
    value := StrToHex(@tempstr)    

[b]PUB[/b] StrToHex(stringptr) : value | char, index

    '' Converts a zero terminated string representaton of a hexadecimal number to a value

    value := index := 0
    [b]repeat[/b] [b]until[/b] ((char := [b]byte[/b][*stringptr][*index++]) == 0)
       [b]if[/b] (char => "0" [b]and[/b] char =< "9")
          value := value * 16 + (char - "0")
       [b]elseif[/b] (char => "A" [b]and[/b] char =< "F")
          value := value * 16 + (10 + char - "A")
       [b]elseif[/b](char => "a" [b]and[/b] char =< "f")   
          value := value * 16 + (10 + char - "a")
    [b]if[/b] [b]byte[/b][*stringptr] == "-"
       value := - value

[b]DAT[/b]

'***********************************
'* Assembly language serial driver *
'***********************************

                        [b]org[/b]
'
'
' Entry
'
entry                   [b]mov[/b]     t1,[b]par[/b]                'get structure address
                        [b]add[/b]     t1,#4 << 2            'skip past heads and tails

                        [b]rdlong[/b]  t2,t1                 'get rx_pin
                        [b]mov[/b]     rxmask,#1
                        [b]shl[/b]     rxmask,t2

                        [b]add[/b]     t1,#4                 'get tx_pin
                        [b]rdlong[/b]  t2,t1
                        [b]mov[/b]     txmask,#1
                        [b]shl[/b]     txmask,t2

                        [b]add[/b]     t1,#4                 'get rxtx_mode
                        [b]rdlong[/b]  rxtxmode,t1

                        [b]add[/b]     t1,#4                 'get bit_ticks
                        [b]rdlong[/b]  bitticks,t1

                        [b]add[/b]     t1,#4                 'get buffer_ptr
                        [b]rdlong[/b]  rxbuff,t1
                        [b]mov[/b]     txbuff,rxbuff
                        [b]add[/b]     txbuff,#16

                        [b]test[/b]    rxtxmode,#%100  [b]wz[/b]    'init tx pin according to mode
                        [b]test[/b]    rxtxmode,#%010  [b]wc[/b]
        [b]if_z_ne_c[/b]       [b]or[/b]      [b]outa[/b],txmask
        [b]if_z[/b]            [b]or[/b]      [b]dira[/b],txmask

                        [b]mov[/b]     txcode,#transmit      'initialize ping-pong multitasking
'
'
' Receive
'
receive                 [b]jmpret[/b]  rxcode,txcode         'run chunk of tx code, then return

                        [b]test[/b]    rxtxmode,#%001  [b]wz[/b]    'wait for start bit on rx pin
                        [b]test[/b]    rxmask,[b]ina[/b]      [b]wc[/b]
        [b]if_z_eq_c[/b]       [b]jmp[/b]     #receive

                        [b]mov[/b]     rxbits,#9             'ready to receive byte
                        [b]mov[/b]     rxcnt,bitticks
                        [b]shr[/b]     rxcnt,#1
                        [b]add[/b]     rxcnt,[b]cnt[/b]                          

:bit                    [b]add[/b]     rxcnt,bitticks        'ready next bit period

:wait                   [b]jmpret[/b]  rxcode,txcode         'run chunk of tx code, then return

                        [b]mov[/b]     t1,rxcnt              'check if bit receive period done
                        [b]sub[/b]     t1,[b]cnt[/b]
                        [b]cmps[/b]    t1,#0           [b]wc[/b]
        [b]if_nc[/b]           [b]jmp[/b]     #:wait

                        [b]test[/b]    rxmask,[b]ina[/b]      [b]wc[/b]    'receive bit on rx pin
                        [b]rcr[/b]     rxdata,#1
                        [b]djnz[/b]    rxbits,#:bit

                        [b]shr[/b]     rxdata,#32-9          'justify and trim received byte
                        [b]and[/b]     rxdata,#$FF
                        [b]test[/b]    rxtxmode,#%001  [b]wz[/b]    'if rx inverted, invert byte
        [b]if_nz[/b]           [b]xor[/b]     rxdata,#$FF

                        [b]rdlong[/b]  t2,[b]par[/b]                'save received byte and inc head
                        [b]add[/b]     t2,rxbuff
                        [b]wrbyte[/b]  rxdata,t2
                        [b]sub[/b]     t2,rxbuff
                        [b]add[/b]     t2,#1
                        [b]and[/b]     t2,#$0F
                        [b]wrlong[/b]  t2,[b]par[/b]

                        [b]jmp[/b]     #receive              'byte done, receive next byte
'
'
' Transmit
'
transmit                [b]jmpret[/b]  txcode,rxcode         'run chunk of rx code, then return

                        [b]mov[/b]     t1,[b]par[/b]                'check for head <> tail
                        [b]add[/b]     t1,#2 << 2
                        [b]rdlong[/b]  t2,t1
                        [b]add[/b]     t1,#1 << 2
                        [b]rdlong[/b]  t3,t1
                        [b]cmp[/b]     t2,t3           [b]wz[/b]
        [b]if_z[/b]            [b]jmp[/b]     #transmit

                        [b]add[/b]     t3,txbuff             'get byte and inc tail
                        [b]rdbyte[/b]  txdata,t3
                        [b]sub[/b]     t3,txbuff
                        [b]add[/b]     t3,#1
                        [b]and[/b]     t3,#$0F
                        [b]wrlong[/b]  t3,t1

                        [b]or[/b]      txdata,#$100          'ready byte to transmit
                        [b]shl[/b]     txdata,#2
                        [b]or[/b]      txdata,#1
                        [b]mov[/b]     txbits,#11
                        [b]mov[/b]     txcnt,[b]cnt[/b]

:bit                    [b]test[/b]    rxtxmode,#%100  [b]wz[/b]    'output bit on tx pin 
                        [b]test[/b]    rxtxmode,#%010  [b]wc[/b]    'according to mode
        [b]if_z_and_c[/b]      [b]xor[/b]     txdata,#1
                        [b]shr[/b]     txdata,#1       [b]wc[/b]
        [b]if_z[/b]            [b]muxc[/b]    [b]outa[/b],txmask        
        [b]if_nz[/b]           [b]muxnc[/b]   [b]dira[/b],txmask
                        [b]add[/b]     txcnt,bitticks        'ready next cnt

:wait                   [b]jmpret[/b]  txcode,rxcode         'run chunk of rx code, then return

                        [b]mov[/b]     t1,txcnt              'check if bit transmit period done
                        [b]sub[/b]     t1,[b]cnt[/b]
                        [b]cmps[/b]    t1,#0           [b]wc[/b]
        [b]if_nc[/b]           [b]jmp[/b]     #:wait

                        [b]djnz[/b]    txbits,#:bit          'another bit to transmit?

                        [b]jmp[/b]     #transmit             'byte done, transmit next byte
'
'
' Uninitialized data
'
t1                      [b]res[/b]     1
t2                      [b]res[/b]     1
t3                      [b]res[/b]     1

rxtxmode                [b]res[/b]     1
bitticks                [b]res[/b]     1

rxmask                  [b]res[/b]     1
rxbuff                  [b]res[/b]     1
rxdata                  [b]res[/b]     1
rxbits                  [b]res[/b]     1
rxcnt                   [b]res[/b]     1
rxcode                  [b]res[/b]     1

txmask                  [b]res[/b]     1
txbuff                  [b]res[/b]     1
txdata                  [b]res[/b]     1
txbits                  [b]res[/b]     1
txcnt                   [b]res[/b]     1
txcode                  [b]res[/b]     1

{{
&#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9488;
&#9474;                           TERMS OF USE: MIT License                                  &#9474;                                                            
&#9500;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9508;
&#9474;Permission is hereby granted, free of charge, to any person obtaining a copy of this  &#9474;
&#9474;software [b]and[/b] associated documentation files (the "Software"), to deal in the Software &#9474; 
&#9474;without restriction, including without limitation the rights to use, copy, modify,    &#9474;
&#9474;merge, publish, distribute, sublicense, [b]and[/b]/[b]or[/b] sell copies of the Software, [b]and[/b] to    &#9474;
&#9474;permit persons to whom the Software is furnished to do so, subject to the following   &#9474;
&#9474;conditions:                                                                           &#9474;                                            &#9474;
&#9474;                                                                                      &#9474;                                               &#9474;
&#9474;The above copyright notice [b]and[/b] this permission notice shall be included in all copies &#9474;
&#9474;[b]or[/b] substantial portions of the Software.                                              &#9474;
&#9474;                                                                                      &#9474;                                                &#9474;
&#9474;THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS [b]OR[/b] IMPLIED,   &#9474;
&#9474;INCLUDING BUT [b]NOT[/b] LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A         &#9474;
&#9474;PARTICULAR PURPOSE [b]AND[/b] NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS [b]OR[/b] COPYRIGHT    &#9474;
&#9474;HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES [b]OR[/b] [b]OTHER[/b] LIABILITY, WHETHER IN AN ACTION     &#9474;
&#9474;OF CONTRACT, TORT [b]OR[/b] OTHERWISE, ARISING [b]FROM[/b], OUT OF [b]OR[/b] IN CONNECTION WITH THE        &#9474;
&#9474;SOFTWARE [b]OR[/b] THE USE [b]OR[/b] [b]OTHER[/b] DEALINGS IN THE SOFTWARE.                                &#9474;
&#9492;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9496;
}}

Comments

  • Phil Pilgrim (PhiPi)Phil Pilgrim (PhiPi) Posts: 23,514
    edited 2012-03-25 00:22
    Cody,

    I don't think that works right anymore. Look at your subscripts. I need to revisit the code formater to be compatible with the new forum.

    -Phil
  • SRLMSRLM Posts: 5,045
    edited 2012-03-25 02:21
    What subscripts are you referring to?

    Also, I notice that the phipi.com/format will format keywords inside of comments, eg "from" and "and" in the above FullDuplexSerialPlus.spin

    Edit: Ah, you mean the subscripts in with the square brackets []? Yes, they do seem to be a bit off.

    Edit: this is my post where I can paste my code...
Sign In or Register to comment.