Files correlati : report.alx Ricompilazione Demo : [ ] Commento : Corretto messaggio di incremento importi git-svn-id: svn://10.65.10.50/trunk@20344 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			261 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			261 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
| \ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
 | ||
| \ Funzioni di aiuto per implementazione messaggi
 | ||
| \ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
 | ||
| 
 | ||
| : REP_GET_POS.X ( f1 -- n1 ) 
 | ||
|   GET_POS DROP 
 | ||
| ;
 | ||
| 
 | ||
| : REP_GET_POS.Y ( f1 -- n1 ) 
 | ||
|   GET_POS NIP 
 | ||
| ;
 | ||
| 
 | ||
| : REP_GET_SIZE.X ( f1 -- n1 ) 
 | ||
|   GET_SIZE DROP 
 | ||
| ;
 | ||
| 
 | ||
| : REP_GET_SIZE.Y ( f1 -- n1 ) 
 | ||
|   GET_SIZE NIP 
 | ||
| ;
 | ||
| 
 | ||
| : REP_GET_BOTTOM ( f1 -- n1 )
 | ||
|   DUP 
 | ||
|   REP_GET_POS.Y
 | ||
|   SWAP 
 | ||
|   REP_GET_SIZE.Y
 | ||
|   +
 | ||
| ;
 | ||
| 
 | ||
| : REP_OFFSET_FIELD_POS.X ( n1 -- ) 
 | ||
|   #THIS REP_GET_POS.X     \ Legge posizione x
 | ||
|   +                       \ La incrementa di n1
 | ||
|   #THIS REP_GET_POS.Y     \ Legge posizione y
 | ||
|   #THIS SET_POS           \ Aggiorna posizione
 | ||
| ;
 | ||
| 
 | ||
| : REP_OFFSET_FIELD_POS.Y ( n1 -- ) 
 | ||
|   #THIS REP_GET_POS.Y     \ Legge posizione y
 | ||
|   +                       \ La incrementa di n1
 | ||
|   #THIS REP_GET_POS.X     \ Legge posizione x
 | ||
|   SWAP                    \ Scambia le coordinate
 | ||
|   #THIS SET_POS           \ Aggiorna posizione
 | ||
| ;
 | ||
| 
 | ||
| : REP_MESSAGE_ALIGN_BOTTOM ( f1 -- )
 | ||
|   REP_GET_BOTTOM          \ Calcola fondo di f1
 | ||
|   #THIS REP_GET_BOTTOM    \ Calcola fondo del campo corrente
 | ||
|   -                       \ Calcola offset come differenza dei due
 | ||
|   REP_OFFSET_FIELD_POS.Y  \ Incrementa posizione y del campo corrente
 | ||
| ;
 | ||
| 
 | ||
| : REP_MESSAGE_ALIGN_TOP ( f1 -- )
 | ||
|   REP_GET_POS.Y           \ Legge posizione y del capo f1
 | ||
|   #THIS REP_GET_POS.X     \ Legge posizione x del campo corrente
 | ||
|   SWAP                    \ Scambia le coordinate
 | ||
|   #THIS SET_POS           \ Aggiorna posizione del campo corrente
 | ||
| ;
 | ||
| 
 | ||
| : REP_MESSAGE_ALIGN_CENTER ( f1 -- )
 | ||
|   REP_GET_BOTTOM          \ Calcola fondo del campo f1
 | ||
|   #THIS REP_GET_BOTTOM    \ Calcola fondo del campo corrente
 | ||
|   - 2 /                   \ Calcola offset verticale
 | ||
|   REP_OFFSET_FIELD_POS.Y  \ Aggiorna posizione del campo corrente
 | ||
| ;
 | ||
| 
 | ||
| : REP_MESSAGE_ALIGN_UNDER ( f1 -- )
 | ||
|   REP_GET_BOTTOM          \ Calcola fondo di f1
 | ||
|   #THIS REP_GET_POS.Y     \ Calcola inizio del campo corrente
 | ||
|   -                       \ Calcola offset come differenza dei due
 | ||
|   REP_OFFSET_FIELD_POS.Y  \ Incrementa posizione y del campo corrente
 | ||
| ;
 | ||
| 
 | ||
| : REP_COPY_HEIGHT ( f1 -- )
 | ||
|   REP_GET_SIZE.Y          \ Altezza campo origine
 | ||
|   #THIS REP_GET_SIZE.X    \ Larghezza campo destinazione
 | ||
|   SWAP                    \ Scambia parametri per set_size
 | ||
|   #THIS SET_SIZE          \ Aggiorna dimensioni
 | ||
| ;
 | ||
| 
 | ||
| : REP_FIELD_NOT_NULL ( f1 -- f1 b1 )
 | ||
|   SP 
 | ||
| ;
 | ||
| 
 | ||
| : REP_ADD_IMPORTO ( f1 -- )
 | ||
| #THIS @                  \ leggo l'importo da sommare
 | ||
| EMPTY= IF                \ se <20> nullo 
 | ||
|   DROP                   \ butta tutto e finisce qui
 | ||
| ELSE
 | ||
|   DUP                    \ duplica l'identificatore della destinazione
 | ||
|   >R                     \ memorizza l'identificare della destinazione nel return stack
 | ||
|   @                      \ valore della destinazione
 | ||
|   EMPTY= IF              \ se <20> nullo
 | ||
|     #THIS GET_ID_NEXT @  \ recupera la sezione sorgente
 | ||
| 	R@ GET_ID_NEXT    !  \ imposta la sezione destinazione
 | ||
|     #THIS @              \ recupera il valore sorgente
 | ||
| 	R@ !                 \ imposta il valore destinazione
 | ||
|   ELSE
 | ||
|     #THIS @              \ leggo l'importo da sommare
 | ||
|     #THIS GET_ID_NEXT @  \ leggo la sezione sorgente
 | ||
|     R@ GET_ID_NEXT @     \ leggo la sezione destinazione
 | ||
|     <> IF                \ se sono diverse
 | ||
|       -1 *               \ inverte valore
 | ||
|     THEN
 | ||
|     R@  +!               \ incrementa la destinazione
 | ||
|   THEN
 | ||
|   R@ @                   \ recupera valore destinazione da normalizzare
 | ||
|   0 < IF                 \ se il valore <20> negativo
 | ||
|     R@ @ -1 *            \ gli cambia segno
 | ||
|     R@ !                 \ lo risalva positivo
 | ||
|     R@ GET_ID_NEXT @     \ recupera sezione di destinazione
 | ||
|     "A" = IF             \ la inverte
 | ||
|       "D"
 | ||
|     ELSE
 | ||
|       "A"
 | ||
|     THEN
 | ||
|     R@ GET_ID_NEXT !     \ salva nuova sezione
 | ||
|   THEN
 | ||
|   R>                     \ ripristina il return stack
 | ||
| THEN
 | ||
| ;
 | ||
| 
 | ||
| \ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
 | ||
| \ Implementazione dei vari messaggi standard
 | ||
| \ f1 campo o sezione del report
 | ||
| \ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
 | ||
| 
 | ||
| : MESSAGE_ADD ( f1 -- )
 | ||
|   #THIS @                      \ Leggo il valore del campo corrente
 | ||
|   SWAP +!                      \ Incrementa f1 col contenuto del campo corrente
 | ||
| ;
 | ||
| 
 | ||
| : MESSAGE_ALIGN ( s1 f1 -- )
 | ||
|   SWAP                         \ Porta su il tipo di allineamento (BOTTOM)
 | ||
|   "REP_MESSAGE_ALIGN_" SWAP +  \ Si crea il nome della funzione da chiamare
 | ||
|   PERFORM                      \ Chiama ad esempio DO_MESSAGE_ALIGN_BOTTOM, ecc... 
 | ||
| ;
 | ||
| 
 | ||
| : MESSAGE_APPEND ( f1 -- )
 | ||
|   #THIS @                      \ Leggo il valore del campo corrente
 | ||
|   DUP EMPTY=                   \ Controlla se e' vuoto
 | ||
|   IF
 | ||
|     DROP                       \ Scarta il valore nullo 
 | ||
| 	DROP                       \ Scarta f1
 | ||
|   ELSE
 | ||
|     OVER @                     \ Leggo il valore di f1
 | ||
| 	EMPTY= NEGATE
 | ||
| 	IF 
 | ||
|       " " SWAP +               \ Sommo uno spazio all'inizio della stringa
 | ||
|     THEN  
 | ||
| 	SWAP                       \ Riporto in primo piano f1
 | ||
|     +!                         \ Incrementa f1 col contenuto della stringa
 | ||
|   THEN
 | ||
| ;
 | ||
| 
 | ||
| : MESSAGE_APPEND_CR ( f1 -- )
 | ||
|   #THIS @                      \ Leggo il valore del campo corrente
 | ||
|   DUP EMPTY=                   \ Controlla se e' vuoto
 | ||
|   IF
 | ||
|     DROP                       \ Scarta il valore nullo 
 | ||
| 	DROP                       \ Scarta f1
 | ||
|   ELSE	 
 | ||
|     CR                         \ Inserisco un "a capo"
 | ||
| 	SWAP
 | ||
|     +                          \ Sommo un "a capo" all'inizio della stringa
 | ||
|     SWAP                       \ Riporto in primo piano f1
 | ||
|     +!                         \ Incrementa f1 col contenuto della stringa
 | ||
|   THEN
 | ||
| ;
 | ||
| 
 | ||
| 
 | ||
| : MESSAGE_COPY ( f1 ... fn -- )
 | ||
|   BEGIN                        \ Ciclo sui prametri 
 | ||
|     REP_FIELD_NOT_NULL
 | ||
|   WHILE              
 | ||
|     #THIS @ SWAP !             \ Copia il campo corrente
 | ||
|   REPEAT
 | ||
| ;
 | ||
| 
 | ||
| : MESSAGE_DEBUG ( NULL -- )
 | ||
|   MON                          \ Attiva il fantastico debugger
 | ||
| ;
 | ||
| 
 | ||
| : MESSAGE_DISABLE ( f1 ... fn -- )
 | ||
|   BEGIN                        \ Ciclo sui prametri 
 | ||
|     REP_FIELD_NOT_NULL
 | ||
|   WHILE              
 | ||
| 	DISABLE                    \ Report defined word
 | ||
|   REPEAT
 | ||
| ;
 | ||
| 
 | ||
| : MESSAGE_ENABLE ( f1 ... fn -- )
 | ||
|   BEGIN                        \ Ciclo sui parametri 
 | ||
|     REP_FIELD_NOT_NULL
 | ||
|   WHILE              
 | ||
| 	ENABLE                     \ Report defined word
 | ||
|   REPEAT
 | ||
| ;
 | ||
| 
 | ||
| : MESSAGE_HIDE ( f1 ... fn -- )
 | ||
|   BEGIN                        \ Ciclo sui prametri 
 | ||
|     REP_FIELD_NOT_NULL
 | ||
|   WHILE              
 | ||
| 	HIDE                       \ Report defined word
 | ||
|   REPEAT
 | ||
| ;
 | ||
| 
 | ||
| : MESSAGE_INCR ( f1 ... fn -- )
 | ||
|   BEGIN                        \ Ciclo sui prametri 
 | ||
|     REP_FIELD_NOT_NULL
 | ||
|   WHILE              
 | ||
| 	INCR                       \ Native word
 | ||
|   REPEAT
 | ||
| ;
 | ||
| 
 | ||
| : MESSAGE_ISAMREAD ( s1 s2 n1 -- )
 | ||
|   ISAM_READ
 | ||
| ;
 | ||
| 
 | ||
| : MESSAGE_PAGENO ( -- )        \ Numero di pagina corrente
 | ||
|   #REPORT.PAGE @               \ Leggo il numero di pagina
 | ||
|   #THIS !                      \ Setto il campo corrente col numero 
 | ||
| ;
 | ||
| 
 | ||
| : MESSAGE_RESET ( f1 ... fn -- )
 | ||
|   BEGIN                        \ Ciclo sui prametri 
 | ||
|     REP_FIELD_NOT_NULL
 | ||
|   WHILE              
 | ||
|     NULL SWAP !                \ Azzera campo
 | ||
|   REPEAT
 | ||
| ;
 | ||
| 
 | ||
| : MESSAGE_SHOW ( f1 ... fn -- )
 | ||
|   BEGIN                        \ Ciclo sui prametri 
 | ||
|     REP_FIELD_NOT_NULL
 | ||
|   WHILE              
 | ||
| 	SHOW                       \ Report defined word
 | ||
|   REPEAT
 | ||
| ;
 | ||
| 
 | ||
| : MESSAGE_SUB ( f1 -- )
 | ||
|   #THIS @                      \ Leggo il campo corrente
 | ||
|   -1 *                         \ Lo cambio di segno
 | ||
|   SWAP +!                      \ Decrementa f1 col contenuto del campo corrente
 | ||
| ;
 | ||
| 
 | ||
| : MESSAGE_TABLEREAD ( s1 s2 s3 -- )
 | ||
|   TABLE_READ
 | ||
| ;
 | ||
| 
 | ||
| : MESSAGE_TODAY ( -- )         \ Data odierna
 | ||
|   #SYSTEM.DATE @               \ Leggo la data
 | ||
|   #THIS !                      \ Setto il campo corrente con la data
 | ||
| ;
 | ||
| 
 | ||
| : MESSAGE_DITTA ( s1 -- )
 | ||
|   GET_FIRM_DATA                \ Campi della ditta corrente
 | ||
| ;
 | ||
| 
 | ||
| : MESSAGE_ADD_IMPORTO ( f1 -- )
 | ||
|   REP_ADD_IMPORTO              \ Incrementa un importo presumendo sia seguito dalla sua sezione
 | ||
| ;
 |