home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / x / volume18 / ftptool-4.3 / part05 < prev    next >
Text File  |  1992-08-18  |  51KB  |  2,044 lines

  1. Newsgroups: comp.sources.x
  2. Path: uunet!decwrl!mips!msi!dcmartin
  3. From: Mike.Sullivan@EBay.Sun.COM (Mike Sullivan {AKA Simon BarSinister})
  4. Subject: v18i087: Ftptool 4.3 (XVIEW), Part05/12
  5. Message-ID: <1992Aug18.153630.28788@msi.com>
  6. Originator: dcmartin@fascet
  7. Sender: dcmartin@msi.com (David C. Martin - Moderator)
  8. Organization: Molecular Simulations, Inc.
  9. References: <csx-18i083-ftptool-4.3@uunet.UU.NET>
  10. Date: Tue, 18 Aug 1992 15:36:30 GMT
  11. Approved: dcmartin@msi.com
  12. Lines: 2030
  13.  
  14. Submitted-by: Mike.Sullivan@EBay.Sun.COM (Mike Sullivan {AKA Simon BarSinister})
  15. Posting-number: Volume 18, Issue 87
  16. Archive-name: ftptool-4.3/part05
  17.  
  18. #!/bin/sh
  19. # this is part.05 (part 5 of a multipart archive)
  20. # do not concatenate these parts, unpack them in order with /bin/sh
  21. # file event.c continued
  22. #
  23. if test ! -r _shar_seq_.tmp; then
  24.     echo 'Please unpack part 1 first!'
  25.     exit 1
  26. fi
  27. (read Scheck
  28.  if test "$Scheck" != 5; then
  29.     echo Please unpack part "$Scheck" next!
  30.     exit 1
  31.  else
  32.     exit 0
  33.  fi
  34. ) < _shar_seq_.tmp || exit 1
  35. if test ! -f _shar_wnt_.tmp; then
  36.     echo 'x - still skipping event.c'
  37. else
  38. echo 'x - continuing file event.c'
  39. sed 's/^X//' << 'SHAR_EOF' >> 'event.c' &&
  40. X                resize_text_item(host_window.advanced.panel, item);
  41. X        } PANEL_END_EACH;
  42. X
  43. X        y = xv_get(host_window.basic.panel, XV_HEIGHT);
  44. X        y -= 25;
  45. X        xv_set(host_window.basic.plus,
  46. X            XV_X, panelwidth - xv_get(host_window.basic.plus, XV_WIDTH) - 5,
  47. X            XV_Y, y,
  48. X            NULL);
  49. X        xv_set(host_window.advanced.minus,
  50. X            XV_Y, y,
  51. X            NULL);
  52. X        connect_rect = (Rect *)xv_get(host_window.basic.connect,
  53. X            XV_RECT);
  54. X        if (!openlook_mode) {
  55. X            dismiss_rect = (Rect *)xv_get(host_window.basic.dismiss, 
  56. X                XV_RECT);
  57. X            space = xv_col(host_window.basic.panel, 1);
  58. X            pos = (panelwidth-
  59. X                (connect_rect->r_width+space+dismiss_rect->r_width))/2;
  60. X            xv_set(host_window.basic.connect,
  61. X                XV_X, pos,
  62. X                XV_Y, y,
  63. X                NULL);
  64. X            xv_set(host_window.basic.dismiss,
  65. X                XV_X, pos + connect_rect->r_width + space,
  66. X                XV_Y, y,
  67. X                NULL);
  68. X        } else {
  69. X            xv_set(host_window.basic.connect,
  70. X                XV_X, panelwidth/2  - connect_rect->r_width/ 2,
  71. X                XV_Y, y,
  72. X                NULL);
  73. X            xv_set(host_window.basic.dismiss,
  74. X                XV_Y, y,
  75. X                NULL);
  76. X        }
  77. X        break;
  78. X    default:
  79. X        break;
  80. X    }
  81. }
  82. X
  83. int    fired;
  84. X
  85. #ifdef USE_PROTOTYPES
  86. void send_noop_command(void)
  87. #else
  88. void send_noop_command()
  89. #endif
  90. {
  91. X    if (!keepalive)
  92. X        return;
  93. X    (void)command("NOOP");
  94. X    fired++;
  95. X    footer_message("Kept connection alive, time = %d", fired, (char *)NULL);
  96. }
  97. X
  98. /* 10 minutes */
  99. static struct itimerval keepalive_itimer = {
  100. X    {600, 0,},
  101. X    {600, 0,}
  102. };
  103. X
  104. #ifdef USE_PROTOTYPES
  105. void idle_timer_on(void)
  106. #else
  107. void idle_timer_on()
  108. #endif
  109. {
  110. X    fired = 0;
  111. X    notify_set_itimer_func(base_window.frame, (Notify_func)send_noop_command, 
  112. X        ITIMER_REAL, &keepalive_itimer, (struct itimerval *)NULL);
  113. }
  114. X
  115. #ifdef USE_PROTOTYPES
  116. void idle_timer_off(void)
  117. #else
  118. void idle_timer_off()
  119. #endif
  120. {
  121. X    notify_set_itimer_func(base_window.frame, NOTIFY_FUNC_NULL, ITIMER_REAL,
  122. X        &keepalive_itimer, (struct itimerval *)NULL);
  123. }
  124. SHAR_EOF
  125. echo 'File event.c is complete' &&
  126. chmod 0644 event.c ||
  127. echo 'restore of event.c failed'
  128. Wc_c="`wc -c < 'event.c'`"
  129. test 13307 -eq "$Wc_c" ||
  130.     echo 'event.c: original size 13307, current size' "$Wc_c"
  131. rm -f _shar_wnt_.tmp
  132. fi
  133. # ============= menu_funcs.c ==============
  134. if test -f 'menu_funcs.c' -a X"$1" != X"-c"; then
  135.     echo 'x - skipping menu_funcs.c (File already exists)'
  136.     rm -f _shar_wnt_.tmp
  137. else
  138. > _shar_wnt_.tmp
  139. echo 'x - extracting menu_funcs.c (Text)'
  140. sed 's/^X//' << 'SHAR_EOF' > 'menu_funcs.c' &&
  141. #include "ftptool.h"
  142. X
  143. #ifdef USE_PROTOTYPES
  144. Menu file_menu_gen(Menu m, Menu_generate op)
  145. #else
  146. Menu file_menu_gen(m,op)
  147. Menu m;
  148. Menu_generate op;
  149. #endif
  150. {
  151. X    static Menu_item copy_item;
  152. X    static Menu_item delete_item;
  153. X    static Menu_item dir_item;
  154. X    static Menu_item compress_file_item;
  155. X    static Menu_item uncompress_file_item;
  156. X    static Menu_item create_tar_file_item;
  157. X    static Menu_item extract_tar_file_item;
  158. X    int    ns,nr;
  159. X
  160. X    switch(op)
  161. X    {
  162. X        case MENU_DISPLAY:
  163. X        /* menu looks like */
  164. X        /*
  165. X            Copy ->
  166. X            Delete ->
  167. X            Directory ->
  168. X            Compress File
  169. X            Uncompress File
  170. X            Create Tar File
  171. X            Extract Tar File
  172. X         */
  173. X            if (copy_item == 0) {
  174. X                copy_item = xv_get(m, MENU_NTH_ITEM, 1);
  175. X                delete_item = xv_get(m, MENU_NTH_ITEM, 2);
  176. X                dir_item = xv_get(m, MENU_NTH_ITEM, 3);
  177. X                compress_file_item = xv_get(m, MENU_NTH_ITEM, 4);
  178. X                uncompress_file_item = xv_get(m, MENU_NTH_ITEM, 5);
  179. X                create_tar_file_item = xv_get(m, MENU_NTH_ITEM, 6);
  180. X                extract_tar_file_item = xv_get(m, MENU_NTH_ITEM, 7);
  181. X            }
  182. X
  183. X            xv_set(copy_item, 
  184. X                MENU_INACTIVE, FALSE, 
  185. X                NULL);
  186. X            xv_set(delete_item, 
  187. X                MENU_INACTIVE, FALSE, 
  188. X                NULL);
  189. X            xv_set(dir_item, 
  190. X                MENU_INACTIVE, FALSE, 
  191. X                NULL);
  192. X            xv_set(uncompress_file_item, 
  193. X                MENU_INACTIVE, FALSE, 
  194. X                NULL);
  195. X            xv_set(extract_tar_file_item, 
  196. X                MENU_INACTIVE, FALSE, 
  197. X                NULL);
  198. X            xv_set(compress_file_item, 
  199. X                MENU_INACTIVE, FALSE, 
  200. X                NULL);
  201. X            xv_set(create_tar_file_item, 
  202. X                MENU_INACTIVE, FALSE, 
  203. X                NULL);
  204. X
  205. X
  206. X            if ((local_list_nfiles + local_list_ndirs) == 0) {
  207. X                xv_set(create_tar_file_item, 
  208. X                    MENU_INACTIVE, TRUE, 
  209. X                    NULL);
  210. X            }
  211. X
  212. X            if (!(local_list_nfiles || local_list_ndirs 
  213. X                || local_list_nothers || remote_list_nfiles 
  214. X                || remote_list_ndirs || remote_list_nothers)) {
  215. X                xv_set(delete_item, 
  216. X                    MENU_INACTIVE, TRUE, 
  217. X                    NULL);
  218. X                ns = (int)xv_get(schedule_window.send_list, PANEL_LIST_NROWS);
  219. X                nr = (int)xv_get(schedule_window.receive_list, PANEL_LIST_NROWS);
  220. X                if ((ns + nr) == 0)
  221. X                    xv_set(copy_item, 
  222. X                        MENU_INACTIVE, TRUE, 
  223. X                        NULL);
  224. X            }
  225. X
  226. X            if (!connected) {
  227. X                xv_set(copy_item, 
  228. X                    MENU_INACTIVE, TRUE, 
  229. X                    NULL);
  230. X                xv_set(dir_item, 
  231. X                    MENU_INACTIVE, TRUE, 
  232. X                    NULL);
  233. X            }
  234. X
  235. X            if (local_list_nfiles == 0) {
  236. X                xv_set(uncompress_file_item, 
  237. X                    MENU_INACTIVE, TRUE, 
  238. X                    NULL);
  239. X                xv_set(extract_tar_file_item, 
  240. X                    MENU_INACTIVE, TRUE, 
  241. X                    NULL);
  242. X                xv_set(compress_file_item, 
  243. X                    MENU_INACTIVE, TRUE, 
  244. X                    NULL);
  245. X            }
  246. X
  247. X            break;
  248. X        case MENU_DISPLAY_DONE:
  249. X            break;
  250. X        case MENU_NOTIFY_DONE:
  251. X            break;
  252. X        case MENU_NOTIFY:
  253. X            break;
  254. X    }
  255. X    return(m);
  256. }
  257. X
  258. #ifdef USE_PROTOTYPES
  259. Menu file_copy_menu_gen(Menu m, Menu_generate op)
  260. #else
  261. Menu file_copy_menu_gen(m,op)
  262. Menu m;
  263. Menu_generate op;
  264. #endif
  265. {
  266. X    static Menu_item remote_to_local_item;
  267. X    static Menu_item local_to_remote_item;
  268. X    static Menu_item batch_remote_to_local_item;
  269. X    static Menu_item batch_local_to_remote_item;
  270. X    int    ns,nr;
  271. X
  272. X    switch(op)
  273. X    {
  274. X        case MENU_DISPLAY:
  275. X        /* pullright menu looks like */
  276. X        /*
  277. X            Remote to Local
  278. X            Local to Remote
  279. X            Remote to Local (Batch)
  280. X            Local to Remote (Batch)
  281. X         */
  282. X            if (remote_to_local_item == 0) {
  283. X                remote_to_local_item = xv_get(m, MENU_NTH_ITEM, 1);
  284. X                local_to_remote_item = xv_get(m, MENU_NTH_ITEM, 2);
  285. X                batch_remote_to_local_item = xv_get(m, MENU_NTH_ITEM, 3);
  286. X                batch_local_to_remote_item = xv_get(m, MENU_NTH_ITEM, 4);
  287. X            }
  288. X
  289. X            xv_set(remote_to_local_item, 
  290. X                MENU_INACTIVE, FALSE, 
  291. X                NULL);
  292. X            xv_set(local_to_remote_item, 
  293. X                MENU_INACTIVE, FALSE, 
  294. X                NULL);
  295. X            xv_set(batch_remote_to_local_item, 
  296. X                MENU_INACTIVE, FALSE, 
  297. X                NULL);
  298. X            xv_set(batch_local_to_remote_item, 
  299. X                MENU_INACTIVE, FALSE, 
  300. X                NULL);
  301. X
  302. X            if ((local_list_nfiles + local_list_ndirs) == 0 || !connected) 
  303. X                xv_set(local_to_remote_item, 
  304. X                    MENU_INACTIVE, TRUE, 
  305. X                    NULL);
  306. X
  307. X            if ((remote_list_nfiles + remote_list_ndirs) == 0) {
  308. X                xv_set(remote_to_local_item, 
  309. X                    MENU_INACTIVE, TRUE, 
  310. X                    NULL);
  311. X            }
  312. X
  313. X            nr = (int)xv_get(schedule_window.receive_list, PANEL_LIST_NROWS);
  314. X            if (nr == 0) {
  315. X                xv_set(batch_remote_to_local_item, 
  316. X                    MENU_INACTIVE, TRUE, 
  317. X                    NULL);
  318. X            }
  319. X
  320. X            ns = (int)xv_get(schedule_window.send_list, PANEL_LIST_NROWS);
  321. X            if (!connected || ns == 0) {
  322. X                xv_set(batch_local_to_remote_item, 
  323. X                    MENU_INACTIVE, TRUE, 
  324. X                    NULL);
  325. X            }
  326. X            break;
  327. X        case MENU_DISPLAY_DONE:
  328. X            break;
  329. X        case MENU_NOTIFY_DONE:
  330. X            break;
  331. X        case MENU_NOTIFY:
  332. X            break;
  333. X    }
  334. X    return(m);
  335. }
  336. X
  337. #ifdef USE_PROTOTYPES
  338. Menu file_delete_menu_gen(Menu m, Menu_generate op)
  339. #else
  340. Menu file_delete_menu_gen(m,op)
  341. Menu m;
  342. Menu_generate op;
  343. #endif
  344. {
  345. X    static Menu_item delete_remote_file_item;
  346. X    static Menu_item delete_local_file_item;
  347. X
  348. X    switch(op)
  349. X    {
  350. X        case MENU_DISPLAY:
  351. X        /* menu looks like */
  352. X        /*
  353. X            Remote File
  354. X            Local File
  355. X         */
  356. X            if (delete_remote_file_item == 0) {
  357. X                delete_remote_file_item = xv_get(m, MENU_NTH_ITEM, 1);
  358. X                delete_local_file_item = xv_get(m, MENU_NTH_ITEM, 2);
  359. X            }
  360. X
  361. X            xv_set(delete_remote_file_item, 
  362. X                MENU_INACTIVE, FALSE, 
  363. X                NULL);
  364. X            xv_set(delete_local_file_item, 
  365. X                MENU_INACTIVE, FALSE, 
  366. X                NULL);
  367. X
  368. X            if ((local_list_nfiles + local_list_ndirs) == 0) {
  369. X                xv_set(delete_local_file_item, 
  370. X                    MENU_INACTIVE, TRUE, 
  371. X                    NULL);
  372. X            }
  373. X
  374. X            if ((remote_list_nfiles + remote_list_ndirs) == 0) {
  375. X                xv_set(delete_remote_file_item, 
  376. X                    MENU_INACTIVE, TRUE, 
  377. X                    NULL);
  378. X            }
  379. X
  380. X            break;
  381. X        case MENU_DISPLAY_DONE:
  382. X            break;
  383. X        case MENU_NOTIFY_DONE:
  384. X            break;
  385. X        case MENU_NOTIFY:
  386. X            break;
  387. X    }
  388. X    return(m);
  389. }
  390. X
  391. X
  392. #ifdef USE_PROTOTYPES
  393. Menu view_menu_gen(Menu m, Menu_generate op)
  394. #else
  395. Menu view_menu_gen(m,op)
  396. Menu m;
  397. Menu_generate op;
  398. #endif
  399. {
  400. X    static Menu_item remote_file_item;
  401. X    static Menu_item local_file_item;
  402. X    static Menu_item local_dir_item;
  403. X    static Menu_item session_log_item;
  404. X    static Menu_item host_info_item;
  405. X
  406. X    switch(op)
  407. X    {
  408. X        case MENU_DISPLAY:
  409. X        /* menu looks like */
  410. X        /*
  411. X            Remote File
  412. X            Local File
  413. X            Local Directory
  414. X            Session Log
  415. X            Current Host Information
  416. X            Batch Schedule
  417. X            About Ftptool...
  418. X         */
  419. X            if (remote_file_item == 0) {
  420. X                remote_file_item = xv_get(m, MENU_NTH_ITEM, 1);
  421. X                local_file_item = xv_get(m, MENU_NTH_ITEM, 2);
  422. X                local_dir_item = xv_get(m, MENU_NTH_ITEM, 3);
  423. X                session_log_item = xv_get(m, MENU_NTH_ITEM, 4);
  424. X                host_info_item = xv_get(m, MENU_NTH_ITEM, 5);
  425. X            }
  426. X
  427. X            xv_set(remote_file_item, 
  428. X                MENU_INACTIVE, FALSE, 
  429. X                NULL);
  430. X            xv_set(local_file_item, 
  431. X                MENU_INACTIVE, FALSE, 
  432. X                NULL);
  433. X            xv_set(local_dir_item, 
  434. X                MENU_INACTIVE, FALSE, 
  435. X                NULL);
  436. X            xv_set(session_log_item, 
  437. X                MENU_INACTIVE, FALSE, 
  438. X                NULL);
  439. X            xv_set(host_info_item, 
  440. X                MENU_INACTIVE, FALSE, 
  441. X                NULL);
  442. X
  443. X            if (remote_list_nfiles == 0)
  444. X                xv_set(remote_file_item, 
  445. X                    MENU_INACTIVE, TRUE, 
  446. X                    NULL);
  447. X
  448. X            if (local_list_nfiles == 0)
  449. X                xv_set(local_file_item, 
  450. X                    MENU_INACTIVE, TRUE, 
  451. X                    NULL);
  452. X
  453. X            if (!logging)
  454. X                xv_set(session_log_item, 
  455. X                    MENU_INACTIVE, TRUE, 
  456. X                    NULL);
  457. X
  458. X            break;
  459. X        case MENU_DISPLAY_DONE:
  460. X            break;
  461. X        case MENU_NOTIFY_DONE:
  462. X            break;
  463. X        case MENU_NOTIFY:
  464. X            break;
  465. X    }
  466. X    return(m);
  467. }
  468. X
  469. #ifdef USE_PROTOTYPES
  470. void change_local_list_menu(void)
  471. #else
  472. void change_local_list_menu()
  473. #endif
  474. {
  475. X    Menu    m;
  476. X    static Menu_item cd_selection_item;
  477. X    static Menu_item local_to_remote_item;
  478. X    static Menu_item add_batch_send_item;
  479. X    static Menu_item local_file_item;
  480. X    static Menu_item delete_local_file_item;
  481. X    static Menu_item local_file_props_item;
  482. X
  483. X
  484. X    /* menu looks like */
  485. X    /*
  486. X     Local Files (Title)
  487. X     -----------------
  488. X     Locate Next Choice
  489. X     Clear All Choices
  490. X
  491. X     CD to Selection
  492. X     Up One Level
  493. X     Copy to Remote
  494. X     Add to Batch Send List
  495. X     View File
  496. X     Delete File
  497. X     File Properties
  498. X     */
  499. X    if (cd_selection_item == 0) {
  500. X        m = xv_get(local_window.list, PANEL_ITEM_MENU);
  501. X        cd_selection_item = xv_get(m, MENU_NTH_ITEM, 5);
  502. X        local_to_remote_item = xv_get(m, MENU_NTH_ITEM, 7);
  503. X        add_batch_send_item = xv_get(m, MENU_NTH_ITEM, 8);
  504. X        local_file_item = xv_get(m, MENU_NTH_ITEM, 9);
  505. X        delete_local_file_item = xv_get(m, MENU_NTH_ITEM, 10);
  506. X        local_file_props_item = xv_get(m, MENU_NTH_ITEM, 11);
  507. X    }
  508. X    xv_set(local_to_remote_item, 
  509. X        MENU_INACTIVE, FALSE, 
  510. X        NULL);
  511. X    xv_set(add_batch_send_item, 
  512. X        MENU_INACTIVE, FALSE, 
  513. X        NULL);
  514. X    xv_set(local_file_item, 
  515. X        MENU_INACTIVE, FALSE, 
  516. X        NULL);
  517. X    xv_set(delete_local_file_item, 
  518. X        MENU_INACTIVE, FALSE, 
  519. X        NULL);
  520. X    xv_set(local_file_props_item, 
  521. X        MENU_INACTIVE, FALSE, 
  522. X        NULL);
  523. X
  524. X    if (local_list_ndirs ==1  && local_list_nfiles == 0) {
  525. X        xv_set(cd_selection_item, 
  526. X            MENU_INACTIVE, FALSE, 
  527. X            NULL);
  528. X    } else {
  529. X        xv_set(cd_selection_item, 
  530. X            MENU_INACTIVE, TRUE, 
  531. X            NULL);
  532. X    }
  533. X
  534. X    if ((local_list_nfiles + local_list_ndirs) == 0 || !connected) 
  535. X        xv_set(local_to_remote_item, 
  536. X            MENU_INACTIVE, TRUE, 
  537. X            NULL);
  538. X
  539. X    if ((local_list_nfiles + local_list_ndirs) == 0)
  540. X        xv_set(add_batch_send_item, 
  541. X            MENU_INACTIVE, TRUE, 
  542. X            NULL);
  543. X
  544. X    if (local_list_nfiles == 0)
  545. X        xv_set(local_file_item, 
  546. X            MENU_INACTIVE, TRUE, 
  547. X            NULL);
  548. X    if ((local_list_nfiles+local_list_ndirs+local_list_nothers) == 0) {
  549. X        xv_set(local_file_props_item, 
  550. X            MENU_INACTIVE, TRUE, 
  551. X            NULL);
  552. X        xv_set(delete_local_file_item, 
  553. X            MENU_INACTIVE, TRUE, 
  554. X            NULL);
  555. X    }
  556. }
  557. X
  558. #ifdef USE_PROTOTYPES
  559. void change_remote_list_menu(void)
  560. #else
  561. void change_remote_list_menu()
  562. #endif
  563. {
  564. X    Menu    m;
  565. X    static Menu_item cd_selection_item;
  566. X    static Menu_item up_one_level_item;
  567. X    static Menu_item remote_to_local_item;
  568. X    static Menu_item add_batch_receive_item;
  569. X    static Menu_item remote_file_item;
  570. X    static Menu_item delete_remote_file_item;
  571. X    static Menu_item remote_file_props_item;
  572. X
  573. X    /* menu looks like */
  574. X    /*
  575. X     Remote File (title)
  576. X     -----------------
  577. X     Locate Next Choice
  578. X     Clear All Choices
  579. X
  580. X     CD to Selection
  581. X     Up One Level
  582. X     Copy to Local
  583. X     Add to Batch Receive List
  584. X     View File
  585. X     Delete
  586. X     File Properties
  587. X     */
  588. X    if (cd_selection_item == 0) {
  589. X        m = xv_get(base_window.list, PANEL_ITEM_MENU), 
  590. X        cd_selection_item = xv_get(m, MENU_NTH_ITEM, 5);
  591. X        up_one_level_item = xv_get(m, MENU_NTH_ITEM, 6);
  592. X        remote_to_local_item = xv_get(m, MENU_NTH_ITEM, 7);
  593. X        add_batch_receive_item = xv_get(m, MENU_NTH_ITEM, 8);
  594. X        remote_file_item = xv_get(m, MENU_NTH_ITEM, 9);
  595. X        delete_remote_file_item = xv_get(m, MENU_NTH_ITEM, 10);
  596. X        remote_file_props_item = xv_get(m, MENU_NTH_ITEM, 11);
  597. X    }
  598. X    if (!connected) {
  599. X        xv_set(cd_selection_item, 
  600. X            MENU_INACTIVE, TRUE, 
  601. X            NULL);
  602. X        xv_set(remote_to_local_item, 
  603. X            MENU_INACTIVE, TRUE, 
  604. X            NULL);
  605. X        xv_set(up_one_level_item, 
  606. X            MENU_INACTIVE, TRUE, 
  607. X            NULL);
  608. X        xv_set(add_batch_receive_item, 
  609. X            MENU_INACTIVE, TRUE, 
  610. X            NULL);
  611. X        xv_set(remote_file_item, 
  612. X            MENU_INACTIVE, TRUE, 
  613. X            NULL);
  614. X        xv_set(delete_remote_file_item, 
  615. X            MENU_INACTIVE, TRUE, 
  616. X            NULL);
  617. X        xv_set(remote_file_props_item, 
  618. X            MENU_INACTIVE, TRUE, 
  619. X            NULL);
  620. X        return;
  621. X    }
  622. X
  623. X    xv_set(up_one_level_item, 
  624. X        MENU_INACTIVE, FALSE, 
  625. X        NULL);
  626. X    xv_set(remote_to_local_item, 
  627. X        MENU_INACTIVE, FALSE, 
  628. X        NULL);
  629. X    xv_set(add_batch_receive_item, 
  630. X        MENU_INACTIVE, FALSE, 
  631. X        NULL);
  632. X    xv_set(remote_file_item, 
  633. X        MENU_INACTIVE, FALSE, 
  634. X        NULL);
  635. X    xv_set(delete_remote_file_item, 
  636. X        MENU_INACTIVE, FALSE, 
  637. X        NULL);
  638. X    xv_set(remote_file_props_item, 
  639. X        MENU_INACTIVE, FALSE, 
  640. X        NULL);
  641. X
  642. X    if (remote_list_ndirs ==1  && remote_list_nfiles == 0) {
  643. X        xv_set(cd_selection_item, 
  644. X            MENU_INACTIVE, FALSE, 
  645. X            NULL);
  646. X    } else {
  647. X        if (non_unix && remote_list_nfiles == 1) {
  648. X            xv_set(cd_selection_item, 
  649. X                MENU_INACTIVE, FALSE, 
  650. X                NULL);
  651. X        } else {
  652. X            xv_set(cd_selection_item, 
  653. X                MENU_INACTIVE, TRUE, 
  654. X                NULL);
  655. X        }
  656. X    }
  657. X
  658. X    if ((remote_list_nfiles + remote_list_ndirs) == 0) {
  659. X        xv_set(remote_to_local_item, 
  660. X            MENU_INACTIVE, TRUE, 
  661. X            NULL);
  662. X        xv_set(add_batch_receive_item, 
  663. X            MENU_INACTIVE, TRUE, 
  664. X            NULL);
  665. X    }
  666. X
  667. X    if (remote_list_nfiles == 0)
  668. X        xv_set(remote_file_item, 
  669. X            MENU_INACTIVE, TRUE, 
  670. X            NULL);
  671. X
  672. X    if ((remote_list_nfiles+remote_list_ndirs+remote_list_nothers) == 0) {
  673. X        xv_set(remote_file_props_item, 
  674. X            MENU_INACTIVE, TRUE, 
  675. X            NULL);
  676. X        xv_set(delete_remote_file_item, 
  677. X            MENU_INACTIVE, TRUE, 
  678. X            NULL);
  679. X    }
  680. }
  681. X
  682. #ifdef USE_PROTOTYPES
  683. Menu props_menu_gen(Menu m, Menu_generate op)
  684. #else
  685. Menu props_menu_gen(m,op)
  686. Menu m;
  687. Menu_generate op;
  688. #endif
  689. {
  690. X    static Menu_item local_file_item;
  691. X    static Menu_item remote_file_item;
  692. X
  693. X    switch(op)
  694. X    {
  695. X        case MENU_DISPLAY:
  696. X        /* menu looks like */
  697. X        /*
  698. X         Tool
  699. X         Local File
  700. X         Remote File
  701. X         */
  702. X            if (local_file_item == 0) {
  703. X                local_file_item = xv_get(m, MENU_NTH_ITEM, 2);
  704. X                remote_file_item = xv_get(m, MENU_NTH_ITEM, 3);
  705. X            }
  706. X            xv_set(local_file_item, 
  707. X                MENU_INACTIVE, FALSE, 
  708. X                NULL);
  709. X            xv_set(remote_file_item, 
  710. X                MENU_INACTIVE, FALSE, 
  711. X                NULL);
  712. X
  713. X            if ((local_list_nfiles+local_list_ndirs+local_list_nothers) == 0)
  714. X                xv_set(local_file_item, 
  715. X                    MENU_INACTIVE, TRUE, 
  716. X                    NULL);
  717. X
  718. X            if ((remote_list_nfiles+remote_list_ndirs+remote_list_nothers) == 0)
  719. X                xv_set(remote_file_item, 
  720. X                    MENU_INACTIVE, TRUE, 
  721. X                    NULL);
  722. X            break;
  723. X        case MENU_DISPLAY_DONE:
  724. X            break;
  725. X        case MENU_NOTIFY_DONE:
  726. X            break;
  727. X        case MENU_NOTIFY:
  728. X            break;
  729. X    }
  730. X    return(m);
  731. }
  732. X
  733. #ifdef USE_PROTOTYPES
  734. Menu send_list_menu_gen(Menu m, Menu_generate op)
  735. #else
  736. Menu send_list_menu_gen(m,op)
  737. Menu m;
  738. Menu_generate op;
  739. #endif
  740. {
  741. X    static Menu_item delete_item;
  742. X    static Menu_item copy_remote_item;
  743. X    static Menu_item load_item;
  744. X    static Menu_item save_item;
  745. X    int    ns;
  746. X
  747. X    switch(op)
  748. X    {
  749. X        case MENU_DISPLAY:
  750. X        /* menu looks like */
  751. X        /*
  752. X         Title
  753. X         Locate Choice
  754. X         Clear all choices
  755. X
  756. X         Delete
  757. X         Copy to Remote
  758. X         Load
  759. X         Save
  760. X         */
  761. X            if (delete_item == 0) {
  762. X                delete_item = xv_get(m, MENU_NTH_ITEM, 5);
  763. X                copy_remote_item = xv_get(m, MENU_NTH_ITEM, 6);
  764. X                load_item = xv_get(m, MENU_NTH_ITEM, 7);
  765. X                save_item = xv_get(m, MENU_NTH_ITEM, 8);
  766. X            }
  767. X            xv_set(delete_item, 
  768. X                MENU_INACTIVE, FALSE, 
  769. X                NULL);
  770. X            xv_set(copy_remote_item, 
  771. X                MENU_INACTIVE, FALSE, 
  772. X                NULL);
  773. X            xv_set(load_item, 
  774. X                MENU_INACTIVE, FALSE, 
  775. X                NULL);
  776. X            xv_set(save_item, 
  777. X                MENU_INACTIVE, FALSE, 
  778. X                NULL);
  779. X
  780. X            if (nsenditems == 0) {
  781. X                xv_set(delete_item, 
  782. X                    MENU_INACTIVE, TRUE, 
  783. X                    NULL);
  784. X            }
  785. X
  786. X            ns = (int)xv_get(schedule_window.receive_list, PANEL_LIST_NROWS);
  787. X            if (ns == 0) {
  788. X                xv_set(save_item, 
  789. X                    MENU_INACTIVE, TRUE, 
  790. X                    NULL);
  791. X            }
  792. X
  793. X            if (!connected || ns == 0 )
  794. X                xv_set(copy_remote_item, 
  795. X                    MENU_INACTIVE, TRUE, 
  796. X                    NULL);
  797. X                
  798. X            break;
  799. X        case MENU_DISPLAY_DONE:
  800. X            break;
  801. X        case MENU_NOTIFY_DONE:
  802. X            break;
  803. X        case MENU_NOTIFY:
  804. X            break;
  805. X    }
  806. X    return(m);
  807. }
  808. X
  809. #ifdef USE_PROTOTYPES
  810. Menu receive_list_menu_gen(Menu m, Menu_generate op)
  811. #else
  812. Menu receive_list_menu_gen(m,op)
  813. Menu m;
  814. Menu_generate op;
  815. #endif
  816. {
  817. X    static Menu_item delete_item;
  818. X    static Menu_item copy_local_item;
  819. X    static Menu_item load_item;
  820. X    static Menu_item save_item;
  821. X    int    nr;
  822. X
  823. X    switch(op)
  824. X    {
  825. X        case MENU_DISPLAY:
  826. X        /* menu looks like */
  827. X        /*
  828. X         Title
  829. X         Locate Choice
  830. X         Clear all choices
  831. X
  832. X         Delete
  833. X         Copy to Local
  834. X         Load
  835. X         Save
  836. X         */
  837. X            if (delete_item == 0) {
  838. X                delete_item = xv_get(m, MENU_NTH_ITEM, 5);
  839. X                copy_local_item = xv_get(m, MENU_NTH_ITEM, 6);
  840. X                load_item = xv_get(m, MENU_NTH_ITEM, 7);
  841. X                save_item = xv_get(m, MENU_NTH_ITEM, 8);
  842. X            }
  843. X            xv_set(delete_item, 
  844. X                MENU_INACTIVE, FALSE, 
  845. X                NULL);
  846. X            xv_set(copy_local_item, 
  847. X                MENU_INACTIVE, FALSE, 
  848. X                NULL);
  849. X            xv_set(load_item, 
  850. X                MENU_INACTIVE, FALSE, 
  851. X                NULL);
  852. X            xv_set(save_item, 
  853. X                MENU_INACTIVE, FALSE, 
  854. X                NULL);
  855. X
  856. X            if (nreceiveitems == 0) {
  857. X                xv_set(delete_item, 
  858. X                    MENU_INACTIVE, TRUE, 
  859. X                    NULL);
  860. X            }
  861. X
  862. X             nr = (int)xv_get(schedule_window.receive_list, PANEL_LIST_NROWS);
  863. X            if (nr == 0) {
  864. X                xv_set(save_item, 
  865. X                    MENU_INACTIVE, TRUE, 
  866. X                    NULL);
  867. X            }
  868. X        
  869. X            if (nr == 0 || !connected) {
  870. X                xv_set(copy_local_item, 
  871. X                    MENU_INACTIVE, TRUE, 
  872. X                    NULL);
  873. X            }
  874. X
  875. X            break;
  876. X        case MENU_DISPLAY_DONE:
  877. X            break;
  878. X        case MENU_NOTIFY_DONE:
  879. X            break;
  880. X        case MENU_NOTIFY:
  881. X            break;
  882. X    }
  883. X    return(m);
  884. }
  885. X
  886. #ifdef USE_PROTOTYPES
  887. Menu host_menu_gen(Menu m, Menu_generate op)
  888. #else
  889. Menu host_menu_gen(m,op)
  890. Menu m;
  891. Menu_generate op;
  892. #endif
  893. {
  894. X    static Menu_item save_item;
  895. X    static Menu_item append_netrc_item;
  896. X
  897. X    switch(op)
  898. X    {
  899. X        case MENU_DISPLAY:
  900. X        /* menu looks like */
  901. X        /*
  902. X            Save
  903. X            Load
  904. X            Append .netrc
  905. X            Add
  906. X            Change
  907. X            Delete
  908. X         */
  909. X            if (save_item == 0) {
  910. X                save_item = xv_get(m, MENU_NTH_ITEM, 1);
  911. X                append_netrc_item = xv_get(m, MENU_NTH_ITEM, 3);
  912. X            }
  913. X
  914. X            if (netrc_filename == NULL)
  915. X                xv_set(append_netrc_item, 
  916. X                    MENU_INACTIVE, TRUE, 
  917. X                    NULL);
  918. X
  919. X            if (timestamped || list_changed) {
  920. X                xv_set(save_item, 
  921. X                    MENU_STRING, "Save (needed)", 
  922. X                    NULL);
  923. X            } else {
  924. X                xv_set(save_item, 
  925. X                    MENU_STRING, "Save", 
  926. X                    NULL);
  927. X            }
  928. X
  929. X            break;
  930. X        case MENU_DISPLAY_DONE:
  931. X            break;
  932. X        case MENU_NOTIFY_DONE:
  933. X            break;
  934. X        case MENU_NOTIFY:
  935. X            break;
  936. X    }
  937. X    return(m);
  938. }
  939. SHAR_EOF
  940. chmod 0644 menu_funcs.c ||
  941. echo 'restore of menu_funcs.c failed'
  942. Wc_c="`wc -c < 'menu_funcs.c'`"
  943. test 16551 -eq "$Wc_c" ||
  944.     echo 'menu_funcs.c: original size 16551, current size' "$Wc_c"
  945. rm -f _shar_wnt_.tmp
  946. fi
  947. # ============= HISTORY ==============
  948. if test -f 'HISTORY' -a X"$1" != X"-c"; then
  949.     echo 'x - skipping HISTORY (File already exists)'
  950.     rm -f _shar_wnt_.tmp
  951. else
  952. > _shar_wnt_.tmp
  953. echo 'x - extracting HISTORY (Text)'
  954. sed 's/^X//' << 'SHAR_EOF' > 'HISTORY' &&
  955. --------
  956. (Intended, perhaps)
  957. X
  958. Drag & Drop (would be great!)
  959. X
  960. Mark files already transferred?
  961. X
  962. Add FONT_SIZE to panel font creation?
  963. X
  964. For each cached directory, save last selected object so it can be
  965. restored?
  966. X
  967. When login fails, capture all errors and put them in a notice?
  968. X
  969. -------------------
  970. Ftptool 4.3 7/10/92
  971. -------------------
  972. X
  973. Changed how it handles PWD responses. Should work a bit better as long
  974. as PWD responses are 257 or 251, and enclose the directory in double-quotes.
  975. X
  976. Can now be compiled with OW2.
  977. X
  978. No longer dies if the remote system runs out of space.
  979. X
  980. New 'ignore case' property for directory lists and host menu.
  981. X
  982. Added directory, file, dot-dot, and unknown-type glyphs to the remote
  983. and local lists.
  984. X
  985. Added Delete buttons to local and remote list menus.
  986. X
  987. Fixed it so it doesn't die when the remote machine runs out of
  988. space.
  989. X
  990. The code is now fully prototyped for ANSI C
  991. X
  992. You can now use tab to move between text items in the host info window.
  993. X
  994. Ftptool now breaks up command lines for viewers into arguments,
  995. so you can pass options to the viewers. %f specifies the filename
  996. to view, so you can do something like this to use a larger font
  997. in textedit: 'textedit -scale extra_large %f'.
  998. X
  999. Added a property to cause ftptool to ignore the case of aliases
  1000. when sorting the host menu.
  1001. X
  1002. If you changed your host list, but did not want to save it when
  1003. quitting (said 'quit anyway' to the pop up), ftptool would still
  1004. save it if it you had connected to any sites (to update the
  1005. timestamp). Now, it won't save, but any timestamps will be lost.
  1006. X
  1007. Fixed a problem where the session window could come up even if the
  1008. tool is started iconic, if you are logging.
  1009. X
  1010. Added code to make it compule under Ultrix (from Robert.Evans@cm.cf.ac.uk)
  1011. and 386 SVR4 (guru@stasi.bradley.edu). I don't have any way of knowing
  1012. if it work on those systems or fixing it if there's something specific
  1013. to those systems that it breaks on, however.
  1014. X
  1015. No longer uses saved window heights and widths if they are smaller
  1016. than the default window size. 
  1017. X
  1018. Fixed the order of size changes when pressing '+' and '-' to
  1019. avoid an apparent server bug. It seems that in 5.0, changing the
  1020. parent frames size to be smaller than the childs can cause the
  1021. server to crash. At least, that's what I think happened.
  1022. X
  1023. Fixed (hopefully) the Total transfer gauge to work, and not crash.
  1024. I've been transferring 100's of megabytes for a few hours, and it seems
  1025. OK.
  1026. X
  1027. Added "Total transferred" to status window. I think it actually works!
  1028. X
  1029. Changed the layout of the Connect window to be simpler.
  1030. X
  1031. Made 'Delete' and 'Change' in the Batch window work.
  1032. X
  1033. Now automatically tries proxy FTP if it can't resolve the remote
  1034. host name (if enabled). It is NOT enabled by default!!!
  1035. X
  1036. Double-clicking a file tries to View it.
  1037. X
  1038. Fixed line 113 of main.c from
  1039. X    CURSOR_MASK_CHAR, OLC_BASIC_MASK_PTR,
  1040. to
  1041. X    CURSOR_MASK_CHAR, OLC_BUSY_MASK_PTR,
  1042. X
  1043. Changed password size in host_list.c.
  1044. X
  1045. Made deletion routines ignore '..'.
  1046. X
  1047. Made it look up 'ftp' and 'ftp-passthru' values using getservbyname(),
  1048. defaulting to values only if it can't find the services.
  1049. X
  1050. Fixed the the writing out of boolean values to only "True" and "False".
  1051. X
  1052. -------------------
  1053. Ftptool 4.2 3/27/92
  1054. -------------------
  1055. X
  1056. Reads and appends .signature when sending feedback.
  1057. X
  1058. Stores defaults in .ftptooldefaults in home directory. At startup, reads
  1059. $XAPPLRESDIR/Ftptool if present, then $HOME/.ftptooldefaults if present.
  1060. For simplicity, $HOME/.ftptoollayout contains the layout.
  1061. X
  1062. Removed the locking code.
  1063. X
  1064. Looks for a system ftptoolrc (/usr/local/lib/ftptoolrc) if no 
  1065. $HOME/.ftptoolrc found.
  1066. X
  1067. Dismisses host window if return pressed in password field.
  1068. X
  1069. Allow 'm' as the first entry in the permissions field?
  1070. X        case 'm': /* Cray and Convex migrated files */
  1071. X                mode = S_IFREG;
  1072. X                break;
  1073. X
  1074. Allows various uppercase letters from AIX 'ls' output.
  1075. X
  1076. Added 'Save layout' option to Properties menu. Also made it a bit more
  1077. accurate.
  1078. X
  1079. If connect fails (with 421, it still says Connecting.
  1080. Same thing for reading directory.
  1081. X
  1082. USER and GROUP now take all non-whitespace characters in the field.
  1083. X
  1084. -------------------
  1085. Ftptool 4.1 2/7/91
  1086. -------------------
  1087. X
  1088. Ported to SunOS 5.0 (SVR4). Added Makefile.50 temporarily.
  1089. X
  1090. 4.0 skipped since other people are using test versions of 4.0, and the
  1091. format of the host list changed again.
  1092. X
  1093. Asks for confirmation of quit if you are still connected.
  1094. X
  1095. Instead of 'connected', the icon label now shows the first 8 characters of 
  1096. the host name you're connected to.
  1097. X
  1098. Option to compile against the resolver library for places without NIS
  1099. (static executable compiled against /usr/lib/libresolv.a)
  1100. X
  1101. Locks .ftptoolrc when reading/writing.
  1102. X
  1103. Abort button actually works now.
  1104. X
  1105. Added sunique/runique ability.
  1106. X
  1107. Added 'percent complete' gauge.
  1108. X
  1109. Added berkeley ftp code to ftptool. Fixes problems with some ftp servers
  1110. providing welcome messages before login.
  1111. X
  1112. Shows free space and percent free for local filesystem.
  1113. X
  1114. Merged Host Information window and Host List window.
  1115. X
  1116. Can schedule file transfer at later time.
  1117. X
  1118. Transfer mode now a per-host attribute.
  1119. X
  1120. Automatically saves host list if only timestamps have been changed.
  1121. X
  1122. Fixed encryption routines to only output printable characters.
  1123. X
  1124. Fixed bug that could cause dotfile symbolic links to appear even if
  1125. you don't want to show dotfiles.
  1126. X
  1127. Handles underscore and dash in login name.
  1128. X
  1129. Fixed tar viewer to work.
  1130. X
  1131. Dismiss buttons on pop-ups. Quit button on tar file viewer
  1132. X
  1133. Doesn't quit on 'recoverable' errors during transfers, such as if
  1134. you don't have permission to transfer a file, or the file has been
  1135. deleted since you selected it.
  1136. X
  1137. Fixed it to kill ftp if you quit via the button.
  1138. X
  1139. -------------------
  1140. Ftptool 3.3 1/10/92
  1141. -------------------
  1142. X
  1143. If you double-click on a symbolic link, it will attempt to 'cd' there.
  1144. You can (hopefully) view and transfer files (and directories) pointed to by 
  1145. symbolic links. Transfers are accomplished by trying to transfer the link
  1146. as a file, and if that fails, transfer as a directory. However, it won't 
  1147. recursively do links in directories (it would not be nice if one was 
  1148. pointing into the directory structure being transferred.
  1149. X
  1150. Displays 'Reading directory' when reading a directory (fancy that).
  1151. X
  1152. Can now sort by type of file, so you can group directories.
  1153. X
  1154. Would hang (then dump on Quit) if you ran out of space on the local
  1155. system.
  1156. X
  1157. Passwords now encrypted in .ftptoolrc file. NOT a strong encryptions,
  1158. especially since the source is available!
  1159. X
  1160. Quit button was not displayed on startup if OPEN LOOK mode not set.
  1161. X
  1162. OPEN LOOK mode changed to boolean (shouldn't affect anything).
  1163. X
  1164. Fixed hang problem if remote site allowed you to partially log in,
  1165. but then didn't because of a limit.
  1166. X
  1167. Can now use ~ and $ expansion in auto-local-cd field.
  1168. X
  1169. Lowercase mode to change remote filenames to lowercase. This is for
  1170. better VMS-type support along with below.
  1171. X
  1172. User defined dir output format to (hopefully) handle non-UNIX cases!
  1173. UNIX default:
  1174. X    PERMS LINKS USER GROUP SIZE MONTH DAY TIME NAME
  1175. X
  1176. <NAME> causes remote filenames to be converted to lowercase.
  1177. X
  1178. You can set non-unix mode with NONUNIX in the above field, so it always
  1179. uses 'ls' for that host. Also, because non-unix machines might really
  1180. use $ in the directory name, non-unix mode now disables $ expansion
  1181. in the remote text field.
  1182. X
  1183. Last Visited timestamp.
  1184. X
  1185. -------------------
  1186. Ftptool 3.2 12/16/91
  1187. -------------------
  1188. X
  1189. No longer stops operation if the local directory is modified.
  1190. X
  1191. No longer have to be connected to do local operations (compress/uncompress/
  1192. make tarfiles from local files)
  1193. X
  1194. Host list now resizable.
  1195. X
  1196. Now creates .Xdefaults if you don't have one.
  1197. X
  1198. Tar viewer works (instead of crashing!)
  1199. X
  1200. Properties now split into separate categories.
  1201. X
  1202. Can sort local and remote directory lists independently.
  1203. X
  1204. Can now automatically cd to a specific local directory for each host.
  1205. X
  1206. -------------------
  1207. Ftptool 3.1 11/25/91
  1208. -------------------
  1209. X
  1210. If you kill it with SIGTERM, no longer gets error, and also kills ftp process.
  1211. X
  1212. To somewhat handle non-OPEN LOOK Window Managers, set OpenLookMode property:
  1213. X    1. displays Quit button on main window.
  1214. X    2. Allows you to dismiss popups by selecting the View option again.
  1215. X
  1216. props key on base window brings up properties window
  1217. X
  1218. Fixed a bug where ftptool would crash when trying to view a local file
  1219. if not connected.
  1220. X
  1221. PostScript viewer now a property.
  1222. X
  1223. Now uses the default password if you leave the password field blank.
  1224. X
  1225. Removed batch mode. Now, you do batch transfers over the batch windows,
  1226. and non-batch transfers over the directory lists.
  1227. X
  1228. Fixed (hopefully) a freeze on timeouts (added too much again, and broke
  1229. something).
  1230. X
  1231. Caches the last directories now, so you can avoid the time delays. This
  1232. will be settable via a property, since too many directories might cause
  1233. exhaustion of memory. Though improving speed, it also causes listings
  1234. to be out of date (local directories are stat'ed so they can be reread if
  1235. they change).
  1236. X
  1237. Fixed the delays on reading directories. Now it shouldn't hang when reading
  1238. a remote directory, and shouldn't hang the whole window system (or at least,
  1239. not as much).
  1240. X
  1241. -------------------
  1242. Ftptool 3.0 11/8/91
  1243. -------------------
  1244. X
  1245. Doesn't have to reread the directory if you change sort modes.
  1246. X
  1247. Defaults host info to first one in host list.
  1248. X
  1249. Properties can open windows automatically.
  1250. X
  1251. Geometry of windows can be saved.
  1252. X
  1253. Batch mode! Can select a bunch of files to retrieve, in separate directories,
  1254. then transfer them all at one time.
  1255. X
  1256. ".." is back on the lists.
  1257. X
  1258. -------------------
  1259. Ftptool 2.8 11/1/91
  1260. -------------------
  1261. X
  1262. If you have a '.' in your hostname, the domain will not be appended
  1263. to your anonymous password (fix for non-Sun internal sites)
  1264. X
  1265. property for the default password.
  1266. X
  1267. won't core dump if you ^C it.
  1268. X
  1269. doesn't hang if you don't have permission to read the directory.
  1270. X
  1271. Changed "Within Sun/Outside Sun' to 'Directly Reachable/Indirect through Proxy"
  1272. X
  1273. Man page (first attempt, bear with me)
  1274. X
  1275. Imakefile (first attempt, bear with me)
  1276. X
  1277. Fixed it to show the correct sort order in the properties window if you
  1278. change it in your .Xdefaults
  1279. X
  1280. Now sets your transfer mode only before a transfer, and sets to ASCII before
  1281. reading the remote dir. This _may_ fix some bugs.
  1282. X
  1283. -------------------
  1284. Ftptool 2.7 10/25/91
  1285. -------------------
  1286. X
  1287. blank lines in your .ftptoolrc don't break ftptool anymore.
  1288. X
  1289. symbolic link values shown again (broke earlier, oops!)
  1290. X
  1291. moved 'About Ftptool' to View menu
  1292. X
  1293. Made it show more of the ftp error messages rather than its own (more accurate
  1294. error messages)
  1295. X
  1296. A machine was found that didn't understand 'pwd' or 'cdup'. Now, use
  1297. 'quote xpwd' or 'quote xcup' if the first ones fail.
  1298. X
  1299. -------------------
  1300. Ftptool 2.6 10/16/91
  1301. -------------------
  1302. X
  1303. I hate to have more and more releases, but another couple of sever bugs.
  1304. X
  1305. X    Doesn't hang anymore if the remote server dies while transferring.
  1306. X
  1307. X    Fixed a core dump bug with non-unix machines (left off a parameter to 
  1308. X    xv_set :-()
  1309. X
  1310. Bonus (which means I probably broke this): Can pin remote and local list menus.
  1311. X
  1312. -------------------
  1313. Ftptool 2.5 10/14/91
  1314. -------------------
  1315. X
  1316. 2 major bugs fixed (major enough for another release):
  1317. X
  1318. X    Now that the temporary directory is deleted at each disconnect, a second
  1319. X    View fails. fixed.
  1320. X
  1321. X    fixed broken 'cd to selection' on local window list.
  1322. X
  1323. Make it back off and use 'ls' if it thinks it's a non-unix machine.
  1324. X
  1325. Add "Custom command" button. Allows you to type whatever command you
  1326. want ('mget *' would be a good one). Doesn't care about the response, just
  1327. outputs until an 'ftp>' prompt (may have to care if the return is 'timeout')
  1328. X
  1329. -------------------
  1330. Ftptool 2.4 10/11/91
  1331. -------------------
  1332. X
  1333. Final bug fixing and code cleanup (hopefully)
  1334. X
  1335. Ability to delete files.
  1336. X
  1337. Fixed a bug in "dir" output parsing.
  1338. X
  1339. Now print ftp errors in some instances ("host unknown" vs. "connect timed out")
  1340. X
  1341. fixed bug which could hang it when transferring zero-length files.
  1342. X
  1343. If the locations of the various windows end up outside the screen, they
  1344. will now be placed at 0,0.
  1345. X
  1346. Fixed "cd to selection". Also cleaned up a lot of code dealing with
  1347. retrieving filenames from the selection window.
  1348. X
  1349. Made "copy" and "delete" pull-rights on the File menu.
  1350. X
  1351. -------------------
  1352. Ftptool 2.3 10/7/91
  1353. -------------------
  1354. X
  1355. Now copy arguments before xview consumes them, so they can be passed
  1356. to viewer (things like -scale extra_large now work).
  1357. X
  1358. Wouldn't create .ftptoolrc if it didn't exist.
  1359. X
  1360. Clean up /var/tmp/ftp* at disconnect instead of exit?
  1361. X
  1362. Exited upon a "Save Workspace". Oops.
  1363. X
  1364. Sort by date was not sorting correctly.
  1365. X
  1366. Change Outside/Inside Sun to Direct/Proxy, with proxy host on a per-host
  1367. bases in .ftptoolrc. (The names weren't changed since I don't have better
  1368. ones).
  1369. X
  1370. Add initial directory to host info.
  1371. X
  1372. Tries to be able to read the old format .ftptoolrc.
  1373. X
  1374. Now sorts the host list.
  1375. X
  1376. -------------------
  1377. Ftptool 2.2 9/28/91
  1378. -------------------
  1379. X
  1380. Oops. Bug fixes. 
  1381. X
  1382. Fixed bug in counting selected directories.
  1383. X
  1384. Fixed painting of lists when busy.
  1385. X
  1386. Fixed double-clicking on directories that are selected already.
  1387. X
  1388. -------------------
  1389. Ftptool 2.1 9/27/91
  1390. -------------------
  1391. X
  1392. Local and remote functions go in their own windows, To add ability to resize 
  1393. scrolling lists, perhaps by placing them side-by-side?
  1394. X
  1395. Machine connected to appears in title bar of remote window. Local machine
  1396. appears in local window title bar.
  1397. X
  1398. Additional exclusive properties for file transfer mode (binary, ascii, etc).
  1399. X
  1400. A property sheet for local and remote files, showing all file information
  1401. available when selecting file (shows last file selected, if multiple ones
  1402. are selected).
  1403. X
  1404. Ability to handle non-unix machines (and machines which have banner
  1405. messages and such). Non-unix machines should work (VMS has been tested),
  1406. but since the list format is non-standard and machine/OS dependent, 
  1407. only the filename (if that) can be determined. 
  1408. X
  1409. Ability to create tar files, and compress files..
  1410. X
  1411. Properties:
  1412. X
  1413. X    hash marks are a property
  1414. X
  1415. X    Don't display dot files (based on property)
  1416. X
  1417. X    Option to sort by name or date or size, and ascending or descending
  1418. X    order.
  1419. X
  1420. X
  1421. Resizing windows and lists pretty much correctly (at least they do it!).
  1422. X
  1423. Slightly more OPEN LOOK compliant.
  1424. X
  1425. "Use" on personal host list window now connects automatically, if
  1426. not already connected.
  1427. X
  1428. Will notify you if you try to quit without saving your host list.
  1429. Also, will put (needed) on the save option if you modified it.
  1430. X
  1431. 'connected' on icon when connected.
  1432. X
  1433. tilde and environment variable expansion.
  1434. X
  1435. X
  1436. Double-clicking on a directory will cd there.
  1437. X
  1438. Save defaults (logging, option mode, etc) to .Xdefaults. Read them at startup.
  1439. X
  1440. Reading .netrc to create selectable ftp accounts/passwords (encrypted on menu)
  1441. X
  1442. Default viewer property
  1443. X
  1444. Archive viewer property
  1445. X
  1446. Keepalive option to send a noop command every 600 seconds if you're idle
  1447. X
  1448. If you try to cd to a directory that doesn't exist, create the directory
  1449. X
  1450. Session Log and about window now pinned.
  1451. X
  1452. Locate Choice and Clear all choices now back on scrolling list menus.
  1453. X
  1454. Doesn't bring up Local Directory window if iconic.
  1455. X
  1456. Status image in the corner, changes for every three blocks transfered
  1457. (if hashing enabled)
  1458. X
  1459. Spot help! (Install ftptool.info in $OPENWINHOME/lib/help)
  1460. X
  1461. -------------------
  1462. Ftptool 2.0 9/19/91 
  1463. -------------------
  1464. X
  1465. "Connect" button changes to "Disconnect" when connected.
  1466. X
  1467. Button layout is somewhat OPEN LOOK compliant.  At the top of the window:
  1468. X [Connect] [File v]      [View v]    [Abort]        [Props...]  
  1469. X               Get                  View files
  1470. X               Put                Show pop-ups.
  1471. X
  1472. Login, password, remote host is, and host on separate pop-up which 
  1473. connect brings up. (perhaps, but then you lose the notion of who you're
  1474. connected to).
  1475. X
  1476. Logging window can be brought up with Props.
  1477. X
  1478. Determine file type in View and start appropriate editor
  1479. (Pageview probably, what about Frame and Interleaf files?)
  1480. X
  1481. Add ability to uncompress compressed files.
  1482. X
  1483. Pressing a return in the directory text fields executes a CD.
  1484. X
  1485. Change cursor to stopwatch when busy.
  1486. X
  1487. Instead of error messages on choosing options that don't apply (using
  1488. 'get file' when no remote file is selected), options are grayed out
  1489. when they don't apply.
  1490. X
  1491. Fixed bug with local directories (if you change your local directory between
  1492. ftp sessions, it doesn't pick it up)
  1493. X
  1494. Catch out-of-space errors.
  1495. X
  1496. If you hit return in the Password text field, it will connect.
  1497. X
  1498. View, get, put, and CD are in scrolling lists menus also.
  1499. X
  1500. Add ability to extract tar files into specified direction (Viewing a
  1501. tar file lists the contents, then you can extract it from there, or
  1502. directly extract from View menu)
  1503. X
  1504. Ftp site list (local to user, with comments).  .ftptoolrc aliases sites to 
  1505. personal names and comments.
  1506. X
  1507. connect button moved to host info popup.
  1508. X
  1509. -------------------
  1510. Ftptool 1.4 9/15/91 
  1511. -------------------
  1512. X
  1513. Fixed to repaint when blocked for ftp responses (notify_do_dispatch() and
  1514. notify_no_dispatch())
  1515. X
  1516. Ability to View local files.
  1517. X
  1518. Inactivate buttons and lists when putting/getting/viewing a file, since
  1519. FRAME_BUSY is no longer allowable.
  1520. X
  1521. Busy and Idle icons. Busy is inverted from the idle icon, and cycles
  1522. between 4 icons while transferring.
  1523. X
  1524. Ability to interrupt a file transfer (between files. No interrupting a current
  1525. transfer yet).
  1526. X
  1527. When doing transfers file, stat() the local directory to see whether it has
  1528. been modified since we drew it, and reread it if so (losing local selection
  1529. information). If we can't stat the local directory, it's possible that it
  1530. was deleted, so change to /tmp (arbitraty choice).
  1531. For remote dirs, may have to assume they won't change.
  1532. X
  1533. -------------------
  1534. Ftptool 1.3 9/-3/91 
  1535. -------------------
  1536. X
  1537. Fixed completion messages.
  1538. X
  1539. Added date to file list.
  1540. X
  1541. Now Sorts local directory listing.
  1542. X
  1543. -------------------
  1544. Ftptool 1.2 9/13/91
  1545. -------------------
  1546. X
  1547. Fixed directory transfers, which I broke with the '/' above.
  1548. X
  1549. X
  1550. -------------------
  1551. Ftptool 1.1 9/12/91
  1552. -------------------
  1553. X
  1554. Fixed it to use getpwuid(getuid()) rather than getlogin().
  1555. Since ftptool failed on at least one machine in engineering,
  1556. also changed it to not exit(1) when it can't find the username.
  1557. Assumes "unknown".
  1558. X
  1559. Added a '/' to the end of directory names, since it wasn't obvious
  1560. (and I agreed) that directories were bold. Now it looks like 'ls -F'
  1561. X
  1562. Changed it to not print the directory name when reading it.
  1563. X
  1564. SHAR_EOF
  1565. chmod 0644 HISTORY ||
  1566. echo 'restore of HISTORY failed'
  1567. Wc_c="`wc -c < 'HISTORY'`"
  1568. test 18272 -eq "$Wc_c" ||
  1569.     echo 'HISTORY: original size 18272, current size' "$Wc_c"
  1570. rm -f _shar_wnt_.tmp
  1571. fi
  1572. # ============= schedule.c ==============
  1573. if test -f 'schedule.c' -a X"$1" != X"-c"; then
  1574.     echo 'x - skipping schedule.c (File already exists)'
  1575.     rm -f _shar_wnt_.tmp
  1576. else
  1577. > _shar_wnt_.tmp
  1578. echo 'x - extracting schedule.c (Text)'
  1579. sed 's/^X//' << 'SHAR_EOF' > 'schedule.c' &&
  1580. #include "ftptool.h"
  1581. X
  1582. #ifdef USE_PROTOTYPES
  1583. struct schedule *new_schedule(char *menu_name, int direction, 
  1584. X    time_t date, char *filename, struct hostlist *hl)
  1585. #else
  1586. struct schedule *new_schedule(menu_name, direction, date, filename, hl)
  1587. char    *menu_name;
  1588. int        direction;
  1589. time_t    date;
  1590. char    *filename;
  1591. struct hostlist *hl;
  1592. #endif
  1593. {
  1594. X    struct schedule *tmp=NULL;
  1595. X
  1596. X    tmp = (struct schedule *)malloc(sizeof(struct schedule));
  1597. X    if (tmp == NULL)
  1598. X        return NULL;
  1599. X    bzero((char *)tmp, sizeof(struct schedule));
  1600. X    tmp->menu_name = (char *)malloc((unsigned int)(2+strlen(menu_name)+1));
  1601. X    if (tmp->menu_name == NULL) {
  1602. X        free_schedule(tmp);
  1603. X        return NULL;
  1604. X    }
  1605. X    sprintf(tmp->menu_name, "%c:%s", direction == RECV ? 'R' : 'S',
  1606. X        menu_name);
  1607. X
  1608. X    tmp->direction = direction;
  1609. X    tmp->date = date;
  1610. X    tmp->filename = strdup(filename);
  1611. X    if (tmp->filename == NULL) {
  1612. X        free_schedule(tmp);
  1613. X        return NULL;
  1614. X    }
  1615. X    tmp->hl = (struct hostlist *)malloc(sizeof(struct hostlist));
  1616. X    if (tmp->hl == NULL) {
  1617. X        free_schedule(tmp);
  1618. X        return NULL;
  1619. X    }
  1620. X    bcopy((char *)hl, (char *)tmp->hl, sizeof(struct hostlist));
  1621. X    tmp->next = NULL;
  1622. X    return tmp;
  1623. }
  1624. X
  1625. #ifdef USE_PROTOTYPES
  1626. struct schedule *add_schedule(struct schedule *head, char *menu_name, 
  1627. X    int direction, time_t date, char *filename, struct hostlist *hl)
  1628. #else
  1629. struct schedule *add_schedule(head, menu_name, direction, date, filename, hl)
  1630. struct schedule *head;
  1631. char    *menu_name;
  1632. int        direction;
  1633. time_t    date;
  1634. char    *filename;
  1635. struct hostlist *hl;
  1636. #endif
  1637. {
  1638. X    struct schedule *tmp=NULL;
  1639. X    struct schedule *oldnext=NULL;
  1640. X
  1641. X    for (tmp = head; tmp->next != NULL; tmp = tmp->next)
  1642. X        if (date < tmp->next->date)
  1643. X            break;
  1644. X
  1645. X    oldnext = tmp->next;
  1646. X    tmp->next = new_schedule(menu_name, direction, date, filename, hl);
  1647. X    if (tmp->next == NULL) {
  1648. X        tmp->next = oldnext;
  1649. X        return NULL;
  1650. X    }
  1651. X
  1652. X    tmp->next->next = oldnext;
  1653. X    return head;
  1654. }
  1655. X
  1656. #ifdef USE_PROTOTYPES
  1657. void free_schedule(struct schedule *head)
  1658. #else
  1659. void free_schedule(head)
  1660. struct schedule *head;
  1661. #endif
  1662. {
  1663. X    struct schedule *tmp=NULL;
  1664. X    struct schedule *item=NULL;
  1665. X
  1666. X    item = head;
  1667. X    while (item) {
  1668. X        tmp = item->next;
  1669. X        if (item->menu_name)
  1670. X            free(item->menu_name);
  1671. X        if (item->filename) {
  1672. X            (void)unlink(item->filename);
  1673. X            free(item->filename);
  1674. X        }
  1675. X        if (item->hl)
  1676. X            free_hostlist(item->hl);
  1677. X        free((char *)item);
  1678. X        item = tmp;
  1679. X    }
  1680. X    return;
  1681. }
  1682. X
  1683. #ifdef USE_PROTOTYPES
  1684. void delete_schedule(struct schedule *head, char *menu_name, int direction)
  1685. #else
  1686. void delete_schedule(head, menu_name, direction)
  1687. struct schedule *head;
  1688. char    *menu_name;
  1689. int        direction;
  1690. #endif
  1691. {
  1692. X    struct schedule *tmp=NULL;
  1693. X    struct schedule *item=NULL;
  1694. X
  1695. X    for (tmp = head; tmp->next != NULL; tmp = tmp->next)
  1696. X        if (tmp->next->direction == direction &&
  1697. X            !strcmp(menu_name, &tmp->next->menu_name[2])) {
  1698. X            item = tmp->next;
  1699. X            tmp->next = tmp->next->next;
  1700. X            item->next = NULL;
  1701. X            free_schedule(item);
  1702. X            return;
  1703. X        }
  1704. X    return;
  1705. }
  1706. X
  1707. #ifdef USE_PROTOTYPES
  1708. void reorder_list(struct schedule *head)
  1709. #else
  1710. void reorder_list(head)
  1711. struct schedule *head;
  1712. #endif
  1713. {
  1714. X    struct schedule *tmp = NULL;
  1715. X    struct schedule nl;
  1716. X    struct schedule *newlist = &nl;
  1717. X    struct schedule *item = NULL;
  1718. X    struct schedule *oldnext = NULL;
  1719. X
  1720. X    newlist->next = NULL;
  1721. X    item = head->next; 
  1722. X    while (item != NULL) {
  1723. X        /* insert item in tmp */
  1724. X        for (tmp = newlist; tmp->next != NULL; tmp = tmp->next)
  1725. X            if (item->date < tmp->next->date) 
  1726. X                break;
  1727. X        oldnext = tmp->next;
  1728. X        tmp->next = item;
  1729. X        item = item->next;
  1730. X        tmp->next->next = oldnext;
  1731. X    }
  1732. X    head->next = newlist->next;
  1733. }
  1734. X
  1735. #ifdef USE_PROTOTYPES
  1736. void load_schedule(void)
  1737. #else
  1738. void load_schedule()
  1739. #endif
  1740. {
  1741. X    static char scratch[2 * MAXHOSTNAMELEN + 4];
  1742. X    char    *host=NULL;
  1743. X    char    *login=NULL;
  1744. X
  1745. X    schedule_footer_message("", (char *)NULL);
  1746. X    host = (char *)xv_get(host_window.basic.host, PANEL_VALUE);
  1747. X    login = (char *)xv_get(host_window.basic.login, PANEL_VALUE);
  1748. X    sprintf(scratch, "%s@%s", login, host);
  1749. X    xv_set(schedule_window.menu_name,
  1750. X        PANEL_VALUE, scratch,
  1751. X        NULL);
  1752. X    update_date(1);
  1753. X    xv_set(schedule_window.frame,
  1754. X        XV_SHOW, TRUE,
  1755. X        NULL);
  1756. }
  1757. X
  1758. #ifdef USE_PROTOTYPES
  1759. void set_current_schedule_proc(Menu menu, Menu_item menu_item)
  1760. #else
  1761. void set_current_schedule_proc(menu, menu_item)
  1762. Menu    menu;
  1763. Menu_item    menu_item;
  1764. #endif
  1765. {
  1766. X    load_schedule();
  1767. X    xv_set(menu, 
  1768. X        MENU_NOTIFY_STATUS, XV_ERROR, 
  1769. X        NULL);
  1770. }
  1771. X
  1772. #ifdef USE_PROTOTYPES
  1773. int schedule_exists(struct schedule *head, char *menu_name, 
  1774. X    int direction)
  1775. #else
  1776. int schedule_exists(head, menu_name, direction)
  1777. struct schedule *head;
  1778. char    *menu_name;
  1779. int        direction;
  1780. #endif
  1781. {
  1782. X    struct schedule *tmp=NULL;
  1783. X
  1784. X    for (tmp = head->next; tmp != NULL; tmp = tmp->next) {
  1785. X        if (direction == tmp->direction 
  1786. X            && !strcmp(menu_name, &tmp->menu_name[2]))
  1787. X            return 1;
  1788. X    }
  1789. X    return 0;
  1790. }
  1791. X
  1792. #ifdef USE_PROTOTYPES
  1793. void enter_schedule_info(int warnchange)
  1794. #else
  1795. void enter_schedule_info(warnchange)
  1796. int    warnchange;
  1797. #endif
  1798. {
  1799. X    char    *menu_name = NULL;
  1800. X    int        direction;
  1801. X    time_t        date;
  1802. X    struct tm    tm;
  1803. X    char    *filename = NULL;
  1804. X    int        answer;
  1805. X    struct hostlist *hl = NULL;
  1806. X    int        nitems;
  1807. X    int        ret;
  1808. #ifdef XVIEW3
  1809. X    Xv_notice notice;
  1810. #endif
  1811. X
  1812. X    direction = (int)xv_get(schedule_window.direction, PANEL_VALUE);
  1813. X    if (direction == RECV)
  1814. X        nitems = (int)xv_get(schedule_window.receive_list, PANEL_LIST_NROWS);
  1815. X    else
  1816. X        nitems = (int)xv_get(schedule_window.send_list, PANEL_LIST_NROWS);
  1817. X
  1818. X    if (nitems == 0) {
  1819. X        schedule_footer_message("Select items to transfer first.", (char *)NULL);
  1820. X        goto out;
  1821. X    }
  1822. X
  1823. X    menu_name = (char *)xv_get(schedule_window.menu_name, PANEL_VALUE);
  1824. X    if (menu_name == '\0') {
  1825. X        schedule_footer_message("Specify login@host first.", (char *)NULL);
  1826. X        goto out;
  1827. X    }
  1828. X    if (schedule_exists(&schedule_list, menu_name, direction)) {
  1829. X        if (warnchange) {
  1830. #ifdef XVIEW3
  1831. X            notice = xv_create(schedule_window.panel, NOTICE,
  1832. X                NOTICE_MESSAGE_STRINGS,
  1833. X                    "That host/action is scheduled. Do you really",
  1834. X                    "want to change it?",
  1835. X                    NULL,
  1836. X                NOTICE_BUTTON_YES, "Yes",
  1837. X                NOTICE_BUTTON_NO, "No",
  1838. X                NOTICE_STATUS, &answer,
  1839. X                XV_SHOW, TRUE,
  1840. X                NULL);
  1841. X            xv_destroy_safe(notice);
  1842. #else
  1843. X            answer = notice_prompt(schedule_window.panel, NULL,
  1844. X                NOTICE_MESSAGE_STRINGS,
  1845. X                    "That host/action is scheduled. Do you really",
  1846. X                    "want to change it?",
  1847. X                    NULL,
  1848. X                NOTICE_BUTTON_YES, "Yes",
  1849. X                NOTICE_BUTTON_NO, "No",
  1850. X                NULL);
  1851. #endif
  1852. X            if (answer != NOTICE_YES)
  1853. X                goto out;
  1854. X        }
  1855. X        delete_schedule(&schedule_list, menu_name, direction);
  1856. X    }
  1857. X    bzero((char *)&tm, sizeof(tm));
  1858. X    tm.tm_hour = (int)xv_get(schedule_window.hour, PANEL_VALUE);
  1859. X    tm.tm_min = (int)xv_get(schedule_window.minute, PANEL_VALUE);
  1860. X    tm.tm_mon = (int)xv_get(schedule_window.month, PANEL_VALUE);
  1861. X    tm.tm_mday = (int)xv_get(schedule_window.day, PANEL_VALUE);
  1862. X    tm.tm_year = (int)xv_get(schedule_window.year, PANEL_VALUE) - 1900;
  1863. #if defined(SYSV) || defined(ultrix) || defined(SYSV386)
  1864. X    date = mktime(&tm);
  1865. #else
  1866. X    date = timelocal(&tm);
  1867. #endif
  1868. X    filename = tempnam("/var/tmp", "sched");
  1869. X    if (filename == NULL) {
  1870. X        schedule_footer_message("Can't create temporary file.", (char *)NULL);
  1871. X        goto out;
  1872. X    }
  1873. X    if (direction == RECV)
  1874. X        ret = save_batch_list(schedule_window.receive_list, filename);
  1875. X    else
  1876. X        ret = save_batch_list(schedule_window.send_list, filename);
  1877. X    if (ret)
  1878. X        goto out;
  1879. X
  1880. X    hl = new_hostlist();
  1881. X    if (hl == NULL)
  1882. X        goto out;
  1883. X    bzero((char *)hl, sizeof(struct hostlist));
  1884. X    hl->aliasname = strdup((char *)(xv_get(host_window.advanced.alias, 
  1885. X        PANEL_VALUE)));
  1886. X    if (hl->aliasname == NULL) {
  1887. X        goto out;
  1888. X    }
  1889. X
  1890. X    hl->proxy = strdup((char *)(xv_get(host_window.advanced.proxy, 
  1891. X        PANEL_VALUE)));
  1892. X    if (hl->proxy == NULL) {
  1893. X        goto out;
  1894. X    }
  1895. X
  1896. X    hl->last_visited = strdup((char *)(xv_get(host_window.advanced.last_visited, 
  1897. X        PANEL_LABEL_STRING)));
  1898. X    if (hl->last_visited == NULL) {
  1899. X        goto out;
  1900. X    }
  1901. X
  1902. X    hl->host = strdup((char *)(xv_get(host_window.basic.host, PANEL_VALUE)));
  1903. X    if (hl->host == NULL) {
  1904. X        goto out;
  1905. X    }
  1906. X
  1907. X    hl->login = strdup((char *)(xv_get(host_window.basic.login, PANEL_VALUE)));
  1908. X    if (hl->login == NULL) {
  1909. X        goto out;
  1910. X    }
  1911. X
  1912. X    hl->password = strdup((char *)(xv_get(host_window.basic.password, 
  1913. X        PANEL_VALUE)));
  1914. X    if (hl->password == NULL) {
  1915. X        goto out;
  1916. X    }
  1917. X
  1918. X    hl->transfer_mode = (int)xv_get(host_window.advanced.transfer_mode, 
  1919. X        PANEL_VALUE);
  1920. X
  1921. X    hl->remote_directory = strdup((char *)
  1922. X        (xv_get(host_window.advanced.remote_auto_cd, PANEL_VALUE)));
  1923. X    if (hl->remote_directory == NULL) {
  1924. X        goto out;
  1925. X    }
  1926. X
  1927. X    hl->local_directory = strdup((char *)
  1928. X        (xv_get(host_window.advanced.local_auto_cd, PANEL_VALUE)));
  1929. X    if (hl->local_directory == NULL) {
  1930. X        goto out;
  1931. X    }
  1932. X
  1933. X    hl->dir_parse = strdup((char *)
  1934. X        (xv_get(host_window.advanced.dir_parse, PANEL_VALUE)));
  1935. X    if (hl->dir_parse == NULL) {
  1936. X        goto out;
  1937. X    }
  1938. X
  1939. X    hl->comment = strdup((char *)
  1940. X        (xv_get(host_window.advanced.comment, PANEL_VALUE)));
  1941. X    if (hl->comment == NULL) {
  1942. X        goto out;
  1943. X    }
  1944. X
  1945. X    if (add_schedule(&schedule_list, menu_name, direction, date, filename, hl)
  1946. X        == NULL) {
  1947. X        xv_set(schedule_window.frame,
  1948. X            FRAME_SHOW_FOOTER, TRUE,
  1949. X            FRAME_LEFT_FOOTER, "Add failed.",
  1950. X            NULL);
  1951. X        goto out;
  1952. X    }
  1953. X    reload_schedule_menu(&schedule_list);
  1954. X    return;
  1955. out:
  1956. X    if (hl)
  1957. X        free_hostlist(hl);
  1958. X    return;
  1959. }
  1960. X
  1961. #ifdef USE_PROTOTYPES
  1962. void schedule_add_proc(Menu menu, Menu_item menu_item)
  1963. #else
  1964. void schedule_add_proc(menu, menu_item)
  1965. Menu    menu;
  1966. Menu_item menu_item;
  1967. #endif
  1968. {
  1969. X    schedule_footer_message("", (char *)NULL);
  1970. X    enter_schedule_info(1);
  1971. X    xv_set(menu, 
  1972. X        MENU_NOTIFY_STATUS, XV_ERROR, 
  1973. X        NULL);
  1974. }
  1975. X
  1976. #ifdef USE_PROTOTYPES
  1977. void schedule_change_proc(Menu menu, Menu_item menu_item)
  1978. #else
  1979. void schedule_change_proc(menu, menu_item)
  1980. Menu    menu;
  1981. Menu_item menu_item;
  1982. #endif
  1983. {
  1984. X    schedule_footer_message("", (char *)NULL);
  1985. X    enter_schedule_info(0);
  1986. X    xv_set(menu, 
  1987. X        MENU_NOTIFY_STATUS, XV_ERROR, 
  1988. X        NULL);
  1989. }
  1990. X
  1991. #ifdef USE_PROTOTYPES
  1992. void schedule_delete_proc(Menu menu, Menu_item menu_item)
  1993. #else
  1994. void schedule_delete_proc(menu, menu_item)
  1995. Menu    menu;
  1996. Menu_item menu_item;
  1997. #endif
  1998. {
  1999. X    char    *menu_name;
  2000. X    int        direction;
  2001. X
  2002. X    schedule_footer_message("", (char *)NULL);
  2003. X    menu_name = (char *)xv_get(schedule_window.menu_name, PANEL_VALUE);
  2004. X    direction = (int)xv_get(schedule_window.direction, PANEL_VALUE);
  2005. X    delete_schedule(&schedule_list, menu_name, direction);
  2006. X    reload_schedule_menu(&schedule_list);
  2007. X    xv_set(menu, 
  2008. X        MENU_NOTIFY_STATUS, XV_ERROR, 
  2009. X        NULL);
  2010. }
  2011. X
  2012. #ifdef USE_PROTOTYPES
  2013. void schedule_item_proc(Menu menu, Menu_item menu_item)
  2014. #else
  2015. void schedule_item_proc(menu, menu_item)
  2016. Menu    menu;
  2017. Menu_item menu_item;
  2018. #endif
  2019. {
  2020. X    struct schedule *tmp=NULL;
  2021. X    struct tm *tm=NULL;
  2022. X
  2023. X    schedule_footer_message("", (char *)NULL);
  2024. X    tmp = (struct schedule *)xv_get(menu_item, MENU_CLIENT_DATA);
  2025. X    xv_set(schedule_window.menu_name,
  2026. X        PANEL_VALUE, tmp->menu_name + 2,
  2027. X        NULL);
  2028. X    xv_set(schedule_window.direction,
  2029. X        PANEL_VALUE, tmp->direction,
  2030. SHAR_EOF
  2031. true || echo 'restore of schedule.c failed'
  2032. fi
  2033. echo 'End of  part 5'
  2034. echo 'File schedule.c is continued in part 6'
  2035. echo 6 > _shar_seq_.tmp
  2036. exit 0
  2037. -- 
  2038. Senior Systems Scientist        mail: dcmartin@msi.com
  2039. Molecular Simulations, Inc.        uucp: uunet!dcmartin
  2040. 796 North Pastoria Avenue        at&t: 408/522-9236
  2041. Sunnyvale, California 94086        fax: 408/732-0831
  2042.