Programma di esempio DISTRIB.PRT
; DISTRIB
;
; Programma per Proteus
;
; (C) 1998 Simone Zanella Productions
;
; Crea una distribuzione a partire da qualsiasi altra distribuzione
; di Proteus, convertendo i terminatori di riga e rimappando
; (se necessario) da CodePage 437 a ISO Latin 1; i file HTML non
; sono mai rimappati.
; Dimostra l'impiego di UDF e di varie funzioni su file e directory;
; utilizza !endprog e quindi i dati appesi allo script (partendo da
; PROG_DATA) per determinare la tabella codici della distribuzione.
;
; Il primo parametro utente deve essere:
; DOS     crea la distribuzione Dos
; UNX     crea la distribuzione Unix
; W95     crea la distribuzione Windows 95

; Parametri impliciti: input e output predefiniti nulli
;!proteus -z


FUNCTION ProcessFile(name)

  ; Ritorna 1 se il file deve essere processato, 0 altrimenti.
  ; Solo i seguenti tipi di file sono convertiti:
  ; *.c *.h *.hlp *.txt *.man *.def *.bat *.prt *.htm configure README

  SET p = STRRSTR(name, ".")
  IF p
    SWITCH RESTFROM(name, p) STRIEQ
      ON ".C"
        RETURN 1
      ON ".H"
        RETURN 1
      ON ".HLP"
        RETURN 1
      ON ".TXT"
        RETURN 1
      ON ".MAN"
        RETURN 1
      ON ".DEF"
        RETURN 1
      ON ".BAT"
        RETURN 1
      ON ".PRT"
        RETURN 1
      ON ".HTM"
        RETURN 1
    OFF
  ELSE
    SWITCH name STRIEQ
      ON "README"
        RETURN 1
      ON "CONFIGURE"
        RETURN 1
    OFF
  FI
RETURN 0

SET H = FOPEN(ARGV(2), 1)
IF EQ(H, -1)
  CONSOLELN "Errore: specificare percorso completo ed " \
            "estensione per lo script"
  ABORT 0
FI
FSEEK(H, PROG_DATA, 0)
SET ISO_Dist = IIF(STREQ(RIGHT(FREAD(H, 2), 1), "\x8A"), 0, 1)
FCLOSE(H)

; Verifica che il programma sia invocato con i corretti parametri
SWITCH ARGV(5) STRIEQ
  ON "UNX"
    SET EOL = "\n"
    SET ISO_New = 1
    SET Dir = "protunx"
    CONSOLELN "Creazione della distribuzione Unix.."
  ON "DOS"
    SET EOL = "\r\n"
    SET ISO_New = 0
    SET Dir = "protdos"
    CONSOLELN "Creazione della distribuzione Dos.."
  ON "W95"
    SET EOL = "\r\n"
    SET ISO_New = 1
    SET Dir = "protw95"
    CONSOLELN "Creazione della distribuzione Windows 95.."
  OTHER
    CONSOLELN "Sintassi: " ARGV(1) " " ARGV(2) " [DOS | UNX | W95]"
    CONSOLELN "Scopo: crea una distribuzione di Proteus"
    ABORT 0
OFF

SET Remap = NEQ(ISO_Dist, ISO_New)
IF Remap
  IF AND(ISO_Dist, NOT(ISO_New))
    ; Mappatura Iso Latin 1 -> Pc-437
    SET Map = MAPNEW("\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE" \
                     "\xEC\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6" \
                     "\xDC\xA2\xA3\xA5\x83\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA" \
                     "\xBF\xAC\xBD\xBC\xA1\xAB\xBB\x7F\xA6\xB5\x9C\xF8\xB1" \
                     "\xF7\xB0\xB7\xB7\xB2\x95\xA0", \
                     "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C" \
                     "\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99" \
                     "\x9A\x9B\x9C\x9D\x9F\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7" \
                     "\xA8\xAA\xAB\xAC\xAD\xAE\xAF\xB1\xB3\xE6\xEC\xED\xF1" \
                     "\xF6\xF8\xF9\xFA\xFD\xFE\xFF")
  ELSE
    ; Mappatura Pc-437 -> Iso Latin 1
    SET Map = MAPNEW("\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C" \
                     "\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99" \
                     "\x9A\x9B\x9C\x9D\x9F\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7" \
                     "\xA8\xAA\xAB\xAC\xAD\xAE\xAF\xB1\xB3\xE6\xEC\xED\xF0" \
                     "\xF1\xF6\xF8\xF9\xFA\xFD\xFE\xFF", \
                     "\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE" \
                     "\xEC\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6" \
                     "\xDC\xA2\xA3\xA5\x83\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA" \
                     "\xBF\xAC\xBD\xBC\xA1\xAB\xBB\x7F\xA6\xB5\x9C\xF8\x3D" \
                     "\xB1\xF7\xB0\xB7\xB7\xB2\x95\xA0")
  FI
FI

; Imposta il separatore di directory in base al sistema operativo
!ifdef MS_DOS
  SET DirSep = "\\"
!else
  SET DirSep = "/"
!endif
SET BaseDir = "." DirSep
SET DD = VECCREATE("." DirSep, "test" DirSep, \
                   "samples" DirSep, "language" DirSep, "html" DirSep)

; Stampa il nome della directory, per informare l'utente di ciņ
; che sta succedendo
CONSOLELN TRUENAME(Dir)

; Crea le sottodirectory
DIRMAKE(Dir)
DIRMAKE(Dir DirSep "test")
DIRMAKE(Dir DirSep "samples")
DIRMAKE(Dir DirSep "html")
DIRMAKE(Dir DirSep "language")
FOR X = 1 TO VECLEN(DD)
  SET BaseDir = VECGET(DD, X)
  IF STREQ(LEFT(VECGET(DD, X), 4), "html")
    ; Disabilita il remapping per i file HTML
    SET Remap = 0
  FI

  ; Stampa il nome della directory, per informare l'utente di ciņ
  ; che sta succedendo
  CONSOLELN TRUENAME(BaseDir)

  ; Apre ed elabora la directory
  SET H = DIROPEN(BaseDir "*.*", 1)
  SET F = IIF(NEQ(H, -1), 1, 0)
  WHILE GT(F, 0)
    ; File trovato
    IF ProcessFile(DIRLAST(H, 1))
      ; Stampa il nome del file, per tenere informato l'utente
      SET Name = Dir DirSep BaseDir DIRLAST(H, 1)
      CONSOLELN Name
      ; Apre per lettura
      SET FH = FOPEN(BaseDir DIRLAST(H, 1), 1)
      IF NEQ(FH, -1)
        SET DH = FOPEN(Name, 26)
        ; Apertura ok - fino alla fine del file..
        WHILE 1
          ; Copia la linea appendendo il corretto terminatore di riga
          SET L = FREADLN(FH)
          IF OR(NOT(FEOF(FH)), ISNOTEMPTY(L))
            IF Remap
              MAP(Map, @L)
            FI
            FWRITELN(DH, L)
          ELSE
            BREAK
          FI
        LOOP
        FCLOSE(FH)
        FCLOSE(DH)
      FI
    FI
    SET F = DIRNEXT(H)
  LOOP
  DIRCLOSE(H)
NEXT

CONSOLELN "La distribuzione si trova in " Dir

ABORT 0

!endprog
#č# <- non modificare! Usato per determinare la mappatura della distribuzione
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