%%HP: T(1)A(R)F(.);
DIR
  DODO 4617164
  SAIR
     UPDIR CLEAR
    
  D.P { }
  N.P { }
  Agend
     STD
      IFERR var
CLEAR CLLCD
"       Aguarde!!!"
3 DISP "AGENDA "
NOMES SIZE +
"_REGISTROS" + {
"Listar"
"Encontrar"
"Inserir" "Alterar"
"Retirar" } 1
CHOOSE
        IF
        THEN DUP
'opt' STO OBJ
        ELSE DOERR
        END
      THEN 1 CF
UPDIR CLEAR
      END CLEAR
    
  fraf
      dad
       dad 1 3
PICK 1 - SUB 3 ROLL
SWAP + dad 3 ROLL 1
+ 4 ALOG SUB
      
    
  Encontrar
     { } DUP 'N.P'
STO 'D.P' STO
"Procurar por..." {
 } INPUT  word
       CLLCD
"     Procurando!!!"
3 DISP NOMES SIZE 1
SWAP
        FOR i
'NOMES' i GET DUP
word POS
          IF
          THEN DUP
'N.P' STO+ NOMES
SWAP POS DADOS SWAP
GET 'D.P' STO+
          ELSE DROP
'DADOS' i GET DUP
word POS
            IF
            THEN
DUP DADOS SWAP POS
'NOMES' SWAP GET
'N.P' STO+ 'D.P'
STO+
            ELSE
DROP
            END
          END
        NEXT N.P
SIZE 0  N.P SIZE 0
 OR
        IF
        THEN 2 SF
Listar
        ELSE word
" no foi 
encontrado !!!"
+ MSGBOX
        END { N.P
D.P } 2 CF PURGE
Agend
      
    
  Listar
     C.NOMES {
FRAG Listar } 2 FS?
{ { } } { { Agend }
} IFTE IFTE
    
  Inserir
    
      IFERR
"Nome... (Para sair ON)"
{  } INPUT "Dados"
{  } INPUT 'DADOS'
STO+ 'NOMES' STO+
Inserir
      THEN CLEAR
Agend
      END
    
  Alterar
     C.NOMES
      IF
      THEN 1 SF
DUP2 'd' STO 'n'
STO 1 Retirar n d 2
LIST opt { "NOME:"
"DADOS:" } { 1 1 }
{ } 5 ROLL INFORM
        IF
        THEN EVAL
DUP2 'DADOS' STO+
'NOMES' STO+
        ELSE n
'NOMES' STO+ d
'DADOS' STO+ n d
        END { n d }
PURGE FRAG DROP
Alterar
      ELSE Agend
      END
    
  Retirar
    
      IF 1 FC?
      THEN C.NOMES
      END
      IF
      THEN DROP
NOMES SIZE NOMES 3
ROLL POS 1 - - 
pos
         NOMES
EVAL pos ROLL DROP
DEPTH LIST 'NOMES'
STO DADOS EVAL pos
ROLL DROP DEPTH
LIST 'DADOS' STO
        
        IF 1 FC?C
        THEN
Retirar
        END
      ELSE Agend
      END
    
  FILTER
     OBJ 1 SWAP
      FOR i DUP "
"
POS 1 SWAP 1 - SUB
LASTARG SWAP DROP 2
+ 4 ALOG SUB
'DADOS' STO+
'NOMES' STO+
      NEXT
    
  FRAG
     { } SWAP
      DO  dad
         dad "
"
POS DUP
          IF 15 >
OVER 0 == OR
          THEN DROP
dad " " POS DUP
            IF 15 >
OVER 0 == OR
            THEN
DROP dad 1 14 SUB +
dad 15 3 ALOG SUB
            ELSE
              DO
DUP 1 + dad SWAP 3
ALOG SUB " " POS
DUP 0 ==
IF
THEN DROP 1
ELSE + LASTARG DROP
OVER 15 >
  IF
  THEN SWAP DROP 1
  ELSE DROP 0
  END
END
              UNTIL
              END
dad fraf
            END
          ELSE dad
fraf
          END DUP
"" SAME { DROP 1 }
0 IFTE
        
      UNTIL
      END 0 CHOOSE
    
  DAT
[[ 2 ]
 [ 1 ]
 [ 3 ]
 [ 4 ]
 [ 2 ]
 [ 5 ]]
  PAR { 1 2 0 0
LINFIT }
  var
    DIR
      SAIR
         UPDIR
CLEAR
        
      DADOS { }
      NOMES { }
      C.NOMES
         opt 2 FS?
{ N.P } { NOMES }
IFTE SORT 1 CHOOSE
          IF
          THEN DUP
2 FS? { N.P } {
NOMES } IFTE SWAP
POS 2 FS? { D.P } {
DADOS } IFTE SWAP
GET 1
          ELSE 0
          END
        
      opt "Retirar"
    END
END
