home *** CD-ROM | disk | FTP | other *** search
/ C!T ROM 2 / ctrom_ii_b.zip / ctrom_ii_b / PROGRAM / FOXPRO / VLIST110 / EXAMPLES / FEDIT.PRG < prev    next >
Text File  |  1992-03-17  |  7KB  |  283 lines

  1. *******************************************************************************
  2. *                                                                             *
  3. *                            File Edit using VLIST                            *
  4. *                                                                             *
  5. *                          (c) 1991 Jayson R. Minard                          *
  6. *                                                                             *
  7. *******************************************************************************
  8.  
  9. #INCLUDE STRING.HDR
  10. #INCLUDE IO.HDR
  11. #INCLUDE FILEIO.HDR
  12. #INCLUDE WARN.HDR
  13. #INCLUDE SYSTEM.HDR
  14. #INCLUDE vlist.hdr
  15. #INCLUDE vmouse.hdr
  16. #INCLUDE COLORS.HDR
  17.  
  18. VARDEF EXTERN
  19.   BYTE __color_std, __color_enhcd
  20. ENDDEF
  21.  
  22. VARDEF
  23.   LOGICAL is_mouse
  24. ENDDEF
  25.  
  26. FUNCTION LOGICAL File_Valid
  27.   PARAMETERS CONST CHAR xfile_name
  28.  
  29.   VARDEF
  30.     CHAR temp_spec
  31.     CHAR temp_path
  32.     CHAR file_name
  33.   ENDDEF
  34.  
  35.   file_name = TRIM( xfile_name )
  36.  
  37.   IF LEN( file_name ) = 0
  38.     temp_spec = "*.*"
  39.   ELSE
  40.     temp_spec = file_name
  41.   ENDIF
  42.  
  43.   IF AT( "*", temp_spec ) > 0 .OR. AT( "?", temp_spec ) > 0
  44.     @4, 0 CLEAR TO 4, 79
  45.     IF AT( "\", temp_spec ) > 0
  46.       temp_path = UPPER( ;
  47.                   Vlist_Fixpath( LEFT( temp_spec, RAT( "\", temp_spec ) ) ) )
  48.       temp_spec = SUBSTR( temp_spec, RAT( "\", temp_spec ) + 1, 128 )
  49.     ELSE
  50.       temp_path = ""
  51.     ENDIF
  52.  
  53.     SAVE_SCREEN()
  54.  
  55.     @24, 24 SAY "<RETURN> select file  <ESC> exit"
  56.  
  57.     CURSOR_OFF()
  58.  
  59.     file_name = Vlist_1_Fpick( 2, 1, 22, 78, &double_box, &black_light_grey,;
  60.                                &black_light_cyan, temp_path, temp_spec,;
  61.                                .T., .F.,;
  62.                                is_mouse, .T. )
  63.  
  64.     CURSOR_ON()
  65.  
  66.     DO CASE
  67.       CASE file_name = "-"
  68.         RESTORE_AREA()
  69.         CLEAR
  70.         ?
  71.         ? "!ERROR:  not enough memory..."
  72.         ? "         Aborted..."
  73.         ?
  74.         QUIT 1
  75.       CASE file_name = "*" .AND. LASTKEY() <> 27
  76.         RESTORE_AREA()
  77.         @4, 2 SAY "No matching filenames found..."
  78.         RETURN .F.
  79.       CASE file_name = "*"
  80.       OTHERWISE
  81.         KEYBOARD( file_name )
  82.         KEY_INT( 13 )     && enter
  83.     ENDCASE
  84.  
  85.     RESTORE_AREA()
  86.   ELSE
  87.     RETURN .T.
  88.   ENDIF
  89.  
  90.  
  91.   RETURN .F.
  92. ENDPRO
  93.  
  94. PROCEDURE FORCE_MAIN
  95.  
  96.   VARDEF
  97.     CHAR( 128 )  file_name
  98.     FILE         in_file
  99.     CHAR         one_line
  100.     UINT         file_top, file_select
  101.     LONG         file_list, pop_list
  102.     LOGICAL      changed
  103.     LOGICAL      keep_going
  104.     INT          temp_row
  105.     UINT         save_var
  106.     UINT         quit_select
  107.   ENDDEF
  108.  
  109.   __color_std      = &black_white
  110.   __color_enhcd    = &blue_white
  111.   __color_hi_std   = &black_light_cyan
  112.   __color_hi_enhcd = &blue_light_cyan
  113.   __color_bar      = &black_light_grey
  114.   __color_tab      = &black_white
  115.  
  116.   CLEAR
  117.   SET SCOREBOARD OFF
  118.  
  119.   IF Vmouse_Init() = 0
  120.     is_mouse = .F.
  121.   ELSE
  122.     is_mouse = .T.
  123.     Vmouse_Reset()
  124.   ENDIF
  125.  
  126.   file_name = SPACE( 128 )
  127.   @0, 2 SAY "Enter filename:  " GET file_name PICTURE "@S50@K" VALID File_Valid( file_name )
  128.   @2, 2 SAY "<ENTER> for pick-list  <ESC> to quit"
  129.   READ
  130.  
  131.   IF LASTKEY() = 27
  132.     CLEAR
  133.     ?
  134.     ? "Aborted..."
  135.     ?
  136.     QUIT
  137.   ENDIF
  138.  
  139.   @0, 0 CLEAR TO 0, 79
  140.   @0, 2 SAY "Filename:   " + file_name PICTURE "@S60"
  141.   @2, 0 CLEAR TO 2, 79
  142.  
  143.   SET SCOREBOARD OFF
  144.   CURSOR_OFF()
  145.  
  146.   IF .NOT. F_OPEN( in_file, file_name, &f_read )
  147.     CLEAR
  148.     ?
  149.     ? "Cannot open file..."
  150.     ?
  151.     QUIT 1
  152.   ENDIF
  153.  
  154.   file_list = VList_Init( 128 )
  155.   IF file_list = 0
  156.     CLEAR
  157.     ?
  158.     ? "Error initializing list..."
  159.     ?
  160.     QUIT 1
  161.   ENDIF
  162.  
  163.   @12, 35 SAY "Reading..."
  164.  
  165.   DO WHILE .NOT. F_EOF( in_file )
  166.     F_GETLN( in_file, one_line )
  167.     IF .NOT. VList_ADD( file_list, one_line )
  168.       @14, 21 SAY "Out of memory, partial file loaded..."
  169.       @16, 33 SAY "press any key!"
  170.  
  171.       file_top = 40
  172.       Vlist_Goto( file_list, Vlist_Max( file_list ) )
  173.       DO WHILE file_top > 0
  174.         IF .NOT. Vlist_Delete( file_list, Vlist_Max( file_list ) )
  175.           EXIT
  176.         ENDIF
  177.  
  178.         file_top = file_top - 1
  179.       ENDDO
  180.  
  181.       GET_KEY()
  182.       EXIT
  183.     ENDIF
  184.  
  185.   ENDDO
  186.  
  187.   F_CLOSE( in_file )
  188.  
  189.   pop_list = VLIST_INIT( 30 )
  190.   __embed_char = "^"
  191.   Vlist_Add( pop_list, "1.0 | Exit: " )
  192.   Vlist_Add( pop_list, "1.1 | ^Save and exit " )
  193.   Vlist_Add( pop_list, "1.2 | ^Abort w/no save " )
  194.  
  195.   changed     = .F.
  196.   keep_going  = .T.
  197.   file_top    = 1
  198.   file_select = 1
  199.  
  200.   FILL( 1, 0, 23, 79, &double_box, " ", &black_light_grey, &black_white, 0 )
  201.   @24, 22 SAY "<RETURN> edit line  <ESC> save | exit"
  202.  
  203.   DO WHILE keep_going
  204.     file_select = Vlist_Pick( file_list, 2, 1, 22, 78,;
  205.                                file_top, file_select,;
  206.                                0, 0, 0, 0,;
  207.                                1, 0,;
  208.                                Vlist_Default_Key_Handler,;
  209.                                .F., .T., .F., is_mouse, .F. )
  210.     IF LASTKEY() = 27
  211.       IF changed
  212.         quit_select = 1
  213.         Vlist_Popup( pop_list, 1, quit_select, Vlist_Default_Menu_Handler,;
  214.                      -1, -1, 24, &double_box, &black_light_grey,;
  215.                      &black_white, .T., .T., save_var, .T., .F.,;
  216.                      is_mouse, .T. )
  217.       ELSE
  218.         KEY_INT( 13 )
  219.         DO WHILE INKEY() <> 0
  220.         ENDDO
  221.  
  222.         quit_select = 2
  223.       ENDIF
  224.  
  225.       IF LASTKEY() <> 27
  226.         IF quit_select = 1
  227.           IF .NOT. F_OPEN( in_file, file_name, &f_create )
  228.             CLEAR
  229.             ?
  230.             ? "ERROR opening file for writing..."
  231.             ?
  232.             QUIT 1
  233.           ENDIF
  234.  
  235.           Vlist_Top( file_list )
  236.           DO WHILE .NOT. Vlist_Bol( file_list )
  237.             one_line = Vlist_Cstr( file_list )
  238.             F_PUT( in_file, RTRIM( one_line ) + CHR( 13 ) + CHR( 10 ) )
  239.             Vlist_Skip( file_list, &jl_forward )
  240.           ENDDO
  241.  
  242.           F_CLOSE( in_file )
  243.         ENDIF
  244.  
  245.         keep_going = .F.
  246.         LOOP
  247.       ENDIF
  248.  
  249.     ELSE
  250.       changed = .T.
  251.       SAVE_SCREEN()
  252.       temp_row = ROW()
  253.       FILL( temp_row - 1, 0, temp_row + 1, 79, &single_box, " ",;
  254.             &black_light_grey, &black_white, 0 )
  255.  
  256.       one_line = Vlist_Cstr( file_list )
  257.       @ temp_row, 1 GET one_line PICTURE "@S78"
  258.       CURSOR_ON()
  259.       READ
  260.       CURSOR_OFF()
  261.  
  262.       IF LASTKEY() <> 27
  263.         Vlist_Cedit( file_list, RTRIM( one_line ) )
  264.       ENDIF
  265.  
  266.       RESTORE_AREA()
  267.     ENDIF
  268.  
  269.   ENDDO
  270.  
  271.   Vlist_Clear( file_list )
  272.   Vlist_Clear( pop_list )
  273.  
  274.   IF is_mouse
  275.     Vmouse_Reset()
  276.     Vmouse_Cursor( .F. )
  277.   ENDIF
  278.  
  279.   CURSOR_ON()
  280.   CLEAR
  281.   CLOSE ALL
  282.   QUIT
  283. ENDPRO