Programma di esempio SPOOLER.PRT
; SPOOLER
;
; Programma per Proteus
;
; (C) 2003 Simone Zanella Productions
;
; Verifica la presenza di un file; nel caso esista e sia scrivibile (quindi non bloccato per aggiornamento da altri
; processi), lo elabora inviando delle stringhe (ad esempio i comandi per produrre un'etichetta su una stampante
; per barcode) unendole con i dati disponibili nel file.
; La stampante alla quale vengono inviati i dati è specificata attraverso l'indirizzo di rete e la porta.
;
; I parametri di funzionamento si trovano all'inizio del programma e sono:
; - Filename = nome del file con i dati
; - NetAddr = indirizzo della stampante
; - NetPort = porta sulla quale la stampante attende la connessione

#!proteus -z -j

!include "win32.prt"
!include "socket.prt"

; Se eseguito come servizio, utilizza dei dati fissi; altrimenti, li preleva dalla riga di comando
!ifdef SERVICE
  Filename = "c:\\spool\\DATI.TXT"
  NetAddr = "172.16.0.82"
  NetPort = 9090
!else
  IF LT(ARGC, 7)
    CONSOLELN "Sintassi: " ARGV(1) " " ARGV(2) " filedati indirizzo porta"
    CONSOLELN ""
    CONSOLELN "Scopo: utilizza il file dati per stampare etichetta sulla stampante"
    CONSOLELN "all'indirizzo e alla porta specificate."
    ABORT 0
  FI
  Filename = ARGV(5)
  NetAddr = ARGV(6)
  NetPort = ARGV(7)
!endif

WHILE 1
  ; Attende mezzo secondo
  SLEEP(0.5)

  IF ISFILE(Filename)

    H2 = FOPEN(Filename, 4)

    IF EQ(H2, -1)
      ; File bloccato, probabilmente lo sta ancora scrivendo
      CONTINUE
    FI
       
    HSock = W32SOCKET(AF_INET, SOCK_STREAM, IPPROTO_TCP)
    
    IF EQ(HSock, -1)
      Message("Errore nella creazione del socket")
      Message("Errore socket: " W32LASTSOCKETERR())
      FCLOSE(H2)
      CONTINUE
    FI
    
    Result = W32CONNECT(HSock, AF_INET, NetPort, NetAddr)
    IF EQ(Result, -1)
      Message("Errore nella connessione del socket")
      Message("Errore socket: " W32LASTSOCKETERR())
      W32SHUTDOWN(HSock, SD_BOTH)
      W32CLOSESOCKET(HSock)
      FCLOSE(H2)
      CONTINUE
    FI
    
    Errore = 0
    WHILE NOT(FEOF(H2))
      S2 = FREADLN(H2)
      IF NOT(ISEMPTY(S2))
        ; Suppone che il file contenga su ogni riga un codice da stampare come barcode
        ; e la quantità di etichette da produrre, separate da una virgola
        Codice = TOKEN(S2, 1, ",")
        NumEtic = TOKEN(S2, 2, ",")

        IF ISEMPTY(NumEtic)
          NumEtic = 1
        FI

        ; Prepara i dati da inviare alla stampante (codice di esempio FingerPrint per stampanti Intermec)
        S = "\r\nCLIP ON\r\nDIR 1\r\nAN 7\r\nPP 100, 100\r\nBT \"CODE39\"\r\n" \
            "BARRATIO 2,1 : BARHEIGHT 120 : BARMAG 3 : BARFONT \"Swiss 721 BT\" ON\r\n" \
            "PB \""  Codice "\"\r\nPF " NumEtic "\r\n"

        Result = W32SEND(HSock, S, 0)
        IF EQ(Result, -1)
          Message("Errore nell'invio")
          Message("Errore socket: " W32LASTSOCKETERR())
          W32SHUTDOWN(HSock, SD_BOTH)
          W32CLOSESOCKET(HSock)
          Errore = 1
          BREAK
        FI
      FI
    LOOP
    
    FCLOSE(H2)
    
    IF EQ(Errore, 0)
      W32SHUTDOWN(HSock, SD_BOTH)
      W32CLOSESOCKET(HSock)
      Message("Invio completato.")
      FREMOVE(Filename)
    FI
  FI
LOOP  

ABORT 0


FUNCTION Message(s)

; Se eseguito come servizio, salva il messaggio su un file di log;
; altrimenti, stampa il messaggio a video
!ifdef SERVICE
  FAPPEND("c:\\spooler\\log.txt", s "\r\n")
!else
  CONSOLELN s
!endif      
RETURN
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