; ACTSYNC
;
; Programma per Proteus
;
; (C) 2005 Simone Zanella Productions
;
; Introduce in emulazione di tastiera i dati presenti in un file localizzato su un dispositivo connesso via
; ActiveSync.
; Questo programma può essere installato come script associato al servizio Proteus.
;
; I parametri si trovano all'inizio del programma e sono:
; - TIMEOUT = timeout in millisecondi per la risposta del dispositivo
; - KILLFILE = flag che indica se cancellare il file dopo averlo trasmesso; se 0, 
;   il file non viene rimosso, ma non viene più ritrasmesso finché non cambia la data/ora/dimensione;
; - TEMPFILE = nome del file temporaneo (dove scaricare i dati prima di inviarli in emulazione tastiera)
; - FILENAME = file del terminale da scaricare
; - POSTFIX = terminatore
;
; In dettaglio, il programma esegue le seguenti operazioni:
; - verifica se c'è un dispositivo collegato ed il file da scaricare;
; - se lo trova, lo scarica nel file temporaneo e lo invia in emulazione di tastiera;
; - se è richiesta la cancellazione, rimuove il file, oppure verifica la data/ora/dimensione
;   e torna ad inviare il file solo quando uno di questi dati cambia.
;
; Il codice commentato più sotto permette anche in alternativa di:
; - selezionare una specifica finestra (applicativo Ultra-Edit) ed inviare il dato verbatim, seguito da Invio;
; - lanciare il blocco note (se non aperto), introdurre il dato verbatim (seguito da Invio) e tornare alla finestra
;   iniziale.

#!proteus -z -j

!extern CEGetFile, PROTEXT.DLL, ProteusCEGetFile, 4, 0
!extern CEFileInfo, PROTEXT.DLL, ProteusCEFileInfo, 2, 560

!include "win32.prt"

CONST TIMEOUT = 3000
CONST KILLFILE = 0
CONST TEMPFILE = "C:\\ACTSYNC.TMP"
CONST FILENAME = "/My Documents/dati.txt"
CONST POSTFIX = "{ENTER}"

LASTCEFIND = ""
WHILE 1
  ; Rimuove il file temporaneo
  FREMOVE(TEMPFILE)

  IF KILLFILE
    ; Se il file viene rimosso dopo la trasmissione, lo prelevo direttamente
    RESULT = CEGetFile(FILENAME, TEMPFILE, TIMEOUT, KILLFILE)

  ELSE  

    ; Verifico data/ora del file e lo scarico solo se cambiate
    CEFIND = CEFileInfo(FILENAME, TIMEOUT)

    ; Se non è un servizio e l'utente ha premuto ESC, esce
    !ifndef SERVICE
      IF KBDHIT()
        IF EQ(GETCH(), 27)
          BREAK
        FI
      FI
    !endif
        
    IF ISNOTEMPTY(CEFIND)
      IF STRNEQ(LEFT(CEFIND, 304), LEFT(LASTCEFIND, 304))
        RESULT = CEGetFile(FILENAME, TEMPFILE, TIMEOUT, KILLFILE)
        IF EQ(RESULT, 0)
          CEFIND = CEFileInfo(FILENAME, TIMEOUT)
          IF ISNOTEMPTY(CEFIND)
            LASTCEFIND = CEFIND
          FI
        FI
      ELSE     
        RESULT = -1
      FI
    ELSE
      RESULT = -1
    FI   
  FI

  ; Se non è un servizio e l'utente ha premuto ESC, esce
  !ifndef SERVICE
    IF KBDHIT()
      IF EQ(GETCH(), 27)
        BREAK
      FI
    FI
  !endif 

  IF EQ(RESULT, 0)
    H = FOPEN(TEMPFILE, 1)
    IF EQ(H, -1)
      CONTINUE
    FI
    
    WHILE NOT(FEOF(H))
      Dato1 = FREADLN(H)
      
      ; >>> Codice di esempio commentato (funzionamento alternativo) <<<
      ;
      ; Seleziona una specifica finestra (che sappiamo essere sicuramente esistente) prima di
      ; inviare il dato in emulazione di tastiera, senza ulteriori elaborazioni, tranne l'aggiunta del postfisso.
      ;
      ; IF STRLEN(Dato1)
      ;   W32SETFOCUS(W32FINDWINDOW("*ULTRAEDIT-32*"))
      ;   W32SENDKEYS(KTrans(Dato1) POSTFIX)
      ; FI
      ; CONTINUE
  
      ; >>> Codice di esempio commentato (funzionamento alternativo) <<<
      ;
      ; Seleziona la finestra del Blocco note; se non esiste, lancia il programma, attende 2 secondi, quindi
      ; introduce il dato in emulazione di tastiera, senza ulteriori elaborazioni.
      ; Il fuoco (= finestra in primo piano) al termine torna all'applicazione precedentemente in evidenza.
      ;
      ; IF STRLEN(Dato1)
      ;   Hold = W32GETFOCUS()
      ;     
      ;   HW = W32FINDWINDOW("*Blocco note*")
      ;   IF EQ(HW, 0)
      ;     W32SHELL("NOTEPAD.EXE")
      ;     SLEEP(2)
      ;     HW = W32FINDWINDOW("*Blocco note*")
      ;   FI
      ;   IF NEQ(HW, 0)
      ;     W32SETFOCUS(HW)
      ;     W32SENDKEYS(KTrans(Dato1) POSTFIX)
      ;   ELSE
      ;     CONSOLELN "Impossibile aprire blocco note!"
      ;   FI
      ;   W32SETFOCUS(Hold)
      ; FI
      ; CONTINUE
      
      W32SENDKEYS(KTrans(Dato1) POSTFIX)
    LOOP      
    FCLOSE(H)
  FI
LOOP
ABORT 0   


FUNCTION KTrans(s)

; Mappatura dei caratteri speciali: caratteri che non si trovano
; sulla tastiera potrebbero richiedere l'introduzione della sequenza
; con ALT + numero

l = STRLEN(s)
r = ""
FOR x = 1 TO l
  c = SUBSTR(s, x, 1)
  SWITCH c STREQ
  ON "~"
    r = r "{ALT DOWN}{NUMPAD1}{NUMPAD2}{NUMPAD6}{ALT UP}"
  ON "{"
    r = r "{ALT DOWN}{NUMPAD1}{NUMPAD2}{NUMPAD3}{ALT UP}"    
  ON "}"
    r = r "{ALT DOWN}{NUMPAD1}{NUMPAD2}{NUMPAD5}{ALT UP}"
  ON "+", "^", "%", "(", ")", "[", "]"
    r = r "{" c "}"
  OTHER
    r = r c
  OFF
NEXT
RETURN r
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