Programma di esempio REMC.PRT
; REMC
;
; Programma per Proteus
;
; (C) 1998-2003 Simone Zanella Productions
;
; Rimuove i commenti C.
;
; Algoritmo:
; - se NON siamo dentro un commento, controlla se c'è un commento sulla
;   linea;
;   SI: trova dove finisce il commento (se sulla riga), trascrivi la
;       parte fuori commento, salta alla prossima parte fuori commento;
;       alla fine, imposta InRem a 1 se siamo ancora dentro un commento;
;   NO: scrive la linea com'è;
; - se siamo dentro un commento, trascrivi solo la parte che è fuori
;   commento (se esiste), impostando InRem alla fine a 0 se siamo ancora
;   fuori commento.
;
; Nota: i token "/*" e "*/" non possono apparire dentro stringhe.

; Inizializza
FUNCTION ONSTART()

  IF STREQ(ARGV(3), "..")
    CONSOLELN "Sintassi: " ARGV(1) " " ARGV(2) " sorgente destinazione"
    CONSOLELN ""
    CONSOLELN "Scopo: rimuove i commenti C da sorgente"
    ABORT 0
  FI

  _InRem = 0
RETURN


IF EQ(InRem, 0)

  ; Trova l'inizio del commento
  Pos = STRSTR(L, "/*")

  ; Crea una copia della linea
  PL = STRDUP(L)

  ; Nuovo commento?
  IF NEQ(Pos, 0)

    ; Flag: scritto qualcosa?
    W = 0

    REPEAT

      ; Pos è dove finisce la parte da trascrivere
      DEC(@Pos)

      ; PL2 è la sottostringa da trascrivere
      PL2 = LEFT(PL, Pos)

      ; Scrive PL2 se non vuota
      IF ISNOTEMPTY(PL2)
        PRINT PL2
        W = 1
      FI

      ; Pos2 è dove finisce il commento (se sulla riga)
      Pos2 = STRSTR(PL, "*/")

      ; Imposta il flag: siamo dentro un commento
      InRem = 1

      ; Il commento finisce sulla riga?
      IF NEQ(Pos2, 0)

        ; Azzera il flag
        InRem = 0

        ; Pos2 è dove inizia la parte da trascrivere
        ADD(@Pos2, 2)

        ; C'è qualcos'altro da trascrivere?
        IF NEQ(Pos2, 0)

          PL = SUBSTR(PL, Pos2, STRLEN(PL))

        ELSE

          BREAK

        FI

      ELSE

        BREAK

      FI

      Pos = STRSTR(PL, "/*")

    UNTIL EQ(Pos, 0)

    ; Ho scritto qualcosa: scrive CR+LF
    IF W
      PRINTLN ""
    FI

  ELSE

    PRINTLN L

  FI

ELSE
  ; Trova la fine del commento
  Pos = STRSTR(L, "*/")

  ; Crea una copia della linea
  PL = STRDUP(L)

  ; Trovata
  IF NEQ(Pos, 0)

    ; Flag: è stato scritto qualcosa?
    W = 0

    REPEAT

      ; Pos è dove inizia la parte da trascrivere
      ADD(@Pos, 2)

      ; PL è la sottostringa da trascrivere
      PL = SUBSTR(PL, Pos, STRLEN(PL))

      ; Trova l'inizio del commento in PL
      Pos2 = STRSTR(PL, "/*")

      ; Imposta a 0 il flag 'dentro commento'
      InRem = 0

      ; Trovato un nuovo commento?
      IF NEQ(Pos2, 0)

        ; Pos2 è dove termina la parte da trascrivere
        DEC(@Pos2)

        ; PL2 è la sottostringa da trascrivere
        PL2 = LEFT(PL, Pos2)

        ; Scrive PL2
        IF ISNOTEMPTY(PL2)
          PRINT PL2
          W = 1
        FI

        ; Trova il prossimo fine commento
        Pos = STRSTR(PL, "*/")

        ; Trovato: aggiorna PL
        IF NEQ(Pos, 0)
          DEC(@Pos)
          PL = SUBSTR(PL, Pos, STRLEN(PL))

        ELSE
          ; Siamo di nuovo dentro un commento
          InRem = 1
        FI

      ELSE

        ; Il resto della linea è fuori commento
        IF ISNOTEMPTY(PL)
          PRINT PL
          W = 1
        FI

      FI

      Pos = STRSTR(PL, "*/")

    UNTIL EQ(Pos, 0)

    ; Ho scritto qualcosa: scrive CR+LF
    IF W
      PRINTLN ""
    FI
  FI
FI
Indice esempi Prossimo esempio Esempio precedente Indice per argomenti Indice analitico
Midnight Lake iPhone Case Black Women Shoes Black Flat Shoes Leather Flats Black Patent Ballerinas Black Ballet Shoes Casual Shoes Black Shoes Women Balle Record Player Cufflinks Best iPhone XR Clear Cases iPhone XS/XS Max Leather Cases Sale Best iPhone 8/8 Plus Silicone Cases iPhone 7/7 Plus Cases & Screen Protector New Cases For iPhone 6/6 Plus iPhone 8 Case Sale iPhone Xr Case Online iPhone 7 Case UK Online iPhone X Case UK Sale iPhone X Case Deals iPhone Xs Case New Case For iPhone Xr UK Online Case For iPhone 8 UK Outlet Fashion Silver Cufflinks For Men Best Mens Cufflinks Outlet Online The Gold Cufflinks Shop Online Cheap Shirt Cufflinks On Sale Nice Wedding Cufflinks UK Online Top Black Cufflinks UK Online Mens Cufflinks Online Silver Cufflinks For Men Men Cufflinks UK Sale Gold Cufflinks UK Online Gold Cufflinks UK Silver Cufflinks UK Shirt Cufflinks Discount Online Mens Cufflinks Deals & Sales Girls Shoes For Dance Fashion Ballet Dance Shoes Best Ballet Flats Shoes UK Online Cheap Ballet Pointe Shoes UK Online Best Ballet Shoes Outlet Best Dance Shoes Sale Cheap Ballet Flats Sale UK Best Pointe Shoes Online UK Ballet Dance Shoes UK Shoes For Dance UK Best Ballet Slippers Shop Best Yoga Shoes Hotsell