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

  1. Path: uunet!usc!elroy.jpl.nasa.gov!swrinde!mips!msi!dcmartin
  2. From: Mike.Sullivan@EBay.Sun.COM (Mike Sullivan {AKA Simon BarSinister})
  3. Newsgroups: comp.sources.x
  4. Subject: v18i089: Ftptool 4.3 (XVIEW), Part07/12
  5. Message-ID: <1992Aug18.153701.28906@msi.com>
  6. Date: 18 Aug 92 15:37:01 GMT
  7. References: <csx-18i083-ftptool-4.3@uunet.UU.NET>
  8. Sender: dcmartin@msi.com (David C. Martin - Moderator)
  9. Organization: Molecular Simulations, Inc.
  10. Lines: 1893
  11. Approved: dcmartin@msi.com
  12. Originator: dcmartin@fascet
  13.  
  14. Submitted-by: Mike.Sullivan@EBay.Sun.COM (Mike Sullivan {AKA Simon BarSinister})
  15. Posting-number: Volume 18, Issue 89
  16. Archive-name: ftptool-4.3/part07
  17.  
  18. #!/bin/sh
  19. # this is part.07 (part 7 of a multipart archive)
  20. # do not concatenate these parts, unpack them in order with /bin/sh
  21. # file main.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" != 7; 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 main.c'
  37. else
  38. echo 'x - continuing file main.c'
  39. sed 's/^X//' << 'SHAR_EOF' >> 'main.c' &&
  40. X        XV_WIDTH, 16,
  41. X        XV_HEIGHT,16,
  42. X        SERVER_IMAGE_DEPTH, 1,
  43. X        SERVER_IMAGE_BITS,file_pr_array,
  44. X        NULL);
  45. X
  46. X    dotdot_glyph = (Server_image )xv_create(XV_NULL,SERVER_IMAGE,
  47. X        XV_WIDTH, 16,
  48. X        XV_HEIGHT,16,
  49. X        SERVER_IMAGE_DEPTH, 1,
  50. X        SERVER_IMAGE_BITS,dotdot_pr_array,
  51. X        NULL);
  52. X
  53. X    unknown_glyph = (Server_image )xv_create(XV_NULL,SERVER_IMAGE,
  54. X        XV_WIDTH, 16,
  55. X        XV_HEIGHT,16,
  56. X        SERVER_IMAGE_DEPTH, 1,
  57. X        SERVER_IMAGE_BITS,unknown_pr_array,
  58. X        NULL);
  59. X
  60. X    create_base_window();
  61. X
  62. X    frame_icon = (Icon)xv_get(base_window.frame, FRAME_ICON);
  63. X    xv_set(frame_icon, 
  64. X        ICON_IMAGE, ftptool_glyph, 
  65. X        ICON_TRANSPARENT, TRUE,
  66. X        NULL);
  67. X
  68. X    normal_cursor = xv_create(base_window.frame, CURSOR,
  69. X        CURSOR_SRC_CHAR, OLC_BASIC_PTR,
  70. X        CURSOR_MASK_CHAR, OLC_BASIC_MASK_PTR,
  71. X        CURSOR_OP, PIX_SRC | PIX_DST,
  72. X        NULL);
  73. X
  74. X    busy_cursor = xv_create(base_window.frame, CURSOR,
  75. X        CURSOR_SRC_CHAR, OLC_BUSY_PTR,
  76. X        CURSOR_MASK_CHAR, OLC_BUSY_MASK_PTR,
  77. X        CURSOR_OP, PIX_SRC | PIX_DST,
  78. X        NULL);
  79. X
  80. X    busy_glyphs[0] = (Server_image )xv_create(XV_NULL,SERVER_IMAGE,
  81. X        XV_WIDTH, 64,
  82. X        XV_HEIGHT,64,
  83. X        SERVER_IMAGE_DEPTH, 1,
  84. X        SERVER_IMAGE_BITS,busy1_icon_array,
  85. X        NULL);
  86. X
  87. X    busy_glyphs[1] = (Server_image )xv_create(XV_NULL,SERVER_IMAGE,
  88. X        XV_WIDTH, 64,
  89. X        XV_HEIGHT,64,
  90. X        SERVER_IMAGE_DEPTH, 1,
  91. X        SERVER_IMAGE_BITS,busy2_icon_array,
  92. X        NULL);
  93. X
  94. X    busy_glyphs[2] = (Server_image )xv_create(XV_NULL,SERVER_IMAGE,
  95. X        XV_WIDTH, 64,
  96. X        XV_HEIGHT,64,
  97. X        SERVER_IMAGE_DEPTH, 1,
  98. X        SERVER_IMAGE_BITS,busy3_icon_array,
  99. X        NULL);
  100. X
  101. X    busy_glyphs[3] = (Server_image )xv_create(XV_NULL,SERVER_IMAGE,
  102. X        XV_WIDTH, 64,
  103. X        XV_HEIGHT,64,
  104. X        SERVER_IMAGE_DEPTH, 1,
  105. X        SERVER_IMAGE_BITS,busy4_icon_array,
  106. X        NULL);
  107. X
  108. X    create_local_window();
  109. X
  110. X    create_host_popup();
  111. X
  112. X    create_session_log();
  113. X
  114. X    create_property_window();
  115. X
  116. X    create_file_property_window(&local_file_properties, 
  117. X        "Ftptool:Local File Properties");
  118. X    create_file_property_window(&remote_file_properties, 
  119. X        "Ftptool:Remote File Properties");
  120. X
  121. X    create_tar_file_popup();
  122. X
  123. X    create_about_window();
  124. X
  125. X    create_feedback_window();
  126. X
  127. X    create_schedule_window();
  128. X
  129. X    create_status_window();
  130. X
  131. X
  132. X    /* make it so ftp doesn't blow when the data connection is closed */
  133. X    /* if the remote filesystem fills up. */
  134. X    signal(SIGPIPE, SIG_IGN);
  135. X
  136. X    /*
  137. X     * Turn control over to XView.
  138. X     */
  139. X    notify_interpose_destroy_func(base_window.frame, destroy_func);
  140. X    notify_set_signal_func(base_window.frame, sig_func, SIGINT, NOTIFY_SYNC);
  141. X    notify_set_itimer_func(schedule_window.current_time, date_wrapper,
  142. X        ITIMER_REAL, &date_timer, (struct itimerval *)NULL);
  143. X    change_local_dir(".", 0);
  144. X
  145. X    xv_set(base_window.frame,
  146. X        XV_SHOW, TRUE,
  147. X        NULL);
  148. X
  149. X    XFlush(dpy);
  150. X
  151. X    update_date(1);
  152. X
  153. X    closed = xv_get(base_window.frame, FRAME_CLOSED);
  154. X
  155. X    XFlush(dpy);
  156. X
  157. X    if (host_window.visible) {
  158. X        xv_set(host_window.frame,
  159. X            XV_SHOW, TRUE,
  160. #ifdef XVIEW3
  161. X            FRAME_CMD_PIN_STATE, FRAME_CMD_PIN_IN,
  162. #else
  163. X            FRAME_CMD_PUSHPIN_IN, TRUE,
  164. #endif
  165. X            FRAME_CLOSED, closed,
  166. X            NULL);
  167. X    }
  168. X    if (host_window.advanced.visible)
  169. X        plus_proc();
  170. X
  171. X    XFlush(dpy);
  172. X
  173. X    if (local_window.visible) {
  174. X        xv_set(local_window.frame,
  175. X            XV_SHOW, TRUE,
  176. #ifdef XVIEW3
  177. X            FRAME_CMD_PIN_STATE, FRAME_CMD_PIN_IN,
  178. #else
  179. X            FRAME_CMD_PUSHPIN_IN, TRUE,
  180. #endif
  181. X            FRAME_CLOSED, closed,
  182. X            NULL);
  183. X    }
  184. X
  185. X    XFlush(dpy);
  186. X
  187. X    if (schedule_window.visible) {
  188. X        xv_set(schedule_window.frame,
  189. X            XV_SHOW, TRUE,
  190. #ifdef XVIEW3
  191. X            FRAME_CMD_PIN_STATE, FRAME_CMD_PIN_IN,
  192. #else
  193. X            FRAME_CMD_PUSHPIN_IN, TRUE,
  194. #endif
  195. X            FRAME_CLOSED, closed,
  196. X            NULL);
  197. X    }
  198. X
  199. X    XFlush(dpy);
  200. X
  201. X    if (status_window.visible) {
  202. X        xv_set(status_window.frame,
  203. X            XV_SHOW, TRUE,
  204. #ifdef XVIEW3
  205. X            FRAME_CMD_PIN_STATE, FRAME_CMD_PIN_IN,
  206. #else
  207. X            FRAME_CMD_PUSHPIN_IN, TRUE,
  208. #endif
  209. X            FRAME_CLOSED, closed,
  210. X            NULL);
  211. X    }
  212. X
  213. X    XFlush(dpy);
  214. X
  215. X    if (logging) {
  216. X        xv_set(session_window.frame,
  217. X            XV_SHOW, TRUE,
  218. #ifdef XVIEW3
  219. X            FRAME_CMD_PIN_STATE, FRAME_CMD_PIN_IN,
  220. #else
  221. X            FRAME_CMD_PUSHPIN_IN, TRUE,
  222. #endif
  223. X            FRAME_CLOSED, closed,
  224. X            NULL);
  225. X    }
  226. X
  227. X    XFlush(dpy);
  228. X
  229. X    for (;;) {
  230. X        XFlush(dpy);
  231. X        notify_start();
  232. X        switch(dowhat) {
  233. X        case DOCONNECT:
  234. X            (void)doconnect();
  235. X            break;
  236. X        case DOGET:
  237. X            doget();
  238. X            break;
  239. X        case DOBATCHGET:
  240. X            dobatchget();
  241. X            break;
  242. X        case DOPUT:
  243. X            doput();
  244. X            break;
  245. X        case DOBATCHPUT:
  246. X            dobatchput();
  247. X            break;
  248. X        case DOLOCALVIEW:
  249. X        case DOREMOTEVIEW:
  250. X            doview(dowhat);
  251. X            break;
  252. X        case DOUNCOMPRESS:
  253. X        case DOEXTRACT:
  254. X        case DOCOMPRESS:
  255. X        case DOTAR:
  256. X        case DOGETTARFILENAME:
  257. X            dofileop(dowhat);
  258. X            break;
  259. X        case DOREMOTECD:
  260. X            doremotecd(0);
  261. X            break;
  262. X        case DOREMOTECDFORCE:
  263. X            doremotecd(1);
  264. X            break;
  265. X        case DOREMOTEDOUBLECLICK:
  266. X            remote_doubleclick();
  267. X            break;
  268. X        case DOSCHEDULE:
  269. X            doschedule();
  270. X            break;
  271. X        case DODIR:
  272. X        case DOLS:
  273. X            list_remote_dir();
  274. X            break;
  275. X        case DOQUIT:
  276. X            exit(0);
  277. X            break;
  278. X        }
  279. X    }
  280. }
  281. X
  282. #ifdef USE_PROTOTYPES
  283. void load_xdefaults(void)
  284. #else
  285. void load_xdefaults()
  286. #endif
  287. {
  288. X    char    *str;
  289. X    int        ct;
  290. X    char    *xapplresdir, res_file[MAXPATHLEN + 10];
  291. X    char    *ftptool_defaults;
  292. X    char    *ftptool_layout;
  293. X
  294. X    if ((xapplresdir = getenv("XAPPLRESDIR")) != NULL) {
  295. X        sprintf(res_file, "%s/Ftptool", xapplresdir);
  296. X        if (access(res_file, R_OK) == 0) {
  297. X            defaults_load_db(res_file);
  298. X        }
  299. X    }
  300. X    ftptool_defaults = find_dotfile(FTPTOOL_DEFAULTS);
  301. X    if (ftptool_defaults) {
  302. X        defaults_load_db(ftptool_defaults);
  303. X        free(ftptool_defaults);
  304. X    }
  305. X    ftptool_layout = find_dotfile(FTPTOOL_LAYOUT);
  306. X    if (ftptool_layout) {
  307. X        defaults_load_db(ftptool_layout);
  308. X        free(ftptool_layout);
  309. X    }
  310. X
  311. X    ct = defaults_get_integer(
  312. X        "openWindows.multiClickTimeout","OpenWindows.MultiClickTimeout",4);
  313. X
  314. X    click_timeout = ct/10.0;
  315. X
  316. X    logging = defaults_get_boolean(
  317. X        "ftptool.LogSession", "Ftptool.LogSession", FALSE);
  318. X
  319. X    keepalive = defaults_get_boolean(
  320. X        "ftptool.KeepConnectionAlive", "Ftptool.KeepConnectionAlive", FALSE);
  321. X
  322. X    if (keepalive != FALSE)
  323. X        keepalive = 1 << 1;
  324. X
  325. X    auto_connect = defaults_get_boolean(
  326. X        "ftptool.AutoConnect", "Ftptool.AutoConnect", FALSE);
  327. X
  328. X    show_status = defaults_get_boolean(
  329. X        "ftptool.AutoShowStatus", "Ftptool.AutoShowStatus", FALSE);
  330. X
  331. X    if (show_status != FALSE)
  332. X        show_status = 1 << 1;
  333. X
  334. X    try_proxy = defaults_get_boolean(
  335. X        "ftptool.TryProxy", "Ftptool.TryProxy", FALSE);
  336. X
  337. X    if (try_proxy != FALSE)
  338. X        try_proxy = 1 << 2;
  339. X
  340. X    unique_local_names = defaults_get_boolean(
  341. X        "ftptool.GenUniqueLocalNames", "Ftptool.GenUniqueLocalNames", FALSE);
  342. X
  343. X    unique_remote_names = defaults_get_boolean(
  344. X        "ftptool.GenUniqueRemoteNames", "Ftptool.GenUniqueRemoteNames", FALSE);
  345. X    
  346. X    if (unique_remote_names != FALSE)
  347. X        unique_remote_names = 1 << 1;
  348. X
  349. X    str = defaults_get_string(
  350. X        "ftptool.TransferMode", "Ftptool.TransferMode", "Binary");
  351. X
  352. X    confirmdeletes = defaults_get_boolean(
  353. X        "ftptool.ConfirmDeletes", "Ftptool.ConfirmDeletes", TRUE);
  354. X
  355. X    dircache_size = defaults_get_integer_check(
  356. X        "ftptool.DirectoryCacheSize", "Ftptool.DirectoryCacheSize", 5, 0, 20);
  357. X
  358. X
  359. X    str = defaults_get_string(
  360. X        "ftptool.SortField", "Ftptool.SortField", "Name");
  361. X
  362. X    remote_sort_mode = SORTBYNAME;
  363. X
  364. X    if (!strcmp(str, "Date"))
  365. X        remote_sort_mode = SORTBYDATE;
  366. X    else if (!strcmp(str, "Size"))
  367. X        remote_sort_mode = SORTBYSIZE;
  368. X
  369. X    remote_sort_direction = defaults_get_integer(
  370. X        "ftptool.SortOrder", "Ftptool.SortOrder", ASCENDING);
  371. X
  372. X    remote_showdotfiles = defaults_get_boolean(
  373. X        "ftptool.ShowHiddenFiles", "Ftptool.ShowHiddenFiles", FALSE);
  374. X
  375. X    group_remote_files  = defaults_get_boolean(
  376. X        "ftptool.SortGrouping", "Ftptool.SortGrouping", FALSE);
  377. X
  378. X    str = defaults_get_string(
  379. X        "ftptool.LocalSortField", "Ftptool.LocalSortField", "Name");
  380. X
  381. X    local_sort_mode = SORTBYNAME;
  382. X
  383. X    if (!strcmp(str, "Date"))
  384. X        local_sort_mode = SORTBYDATE;
  385. X    else if (!strcmp(str, "Size"))
  386. X        local_sort_mode = SORTBYSIZE;
  387. X
  388. X    local_sort_direction = defaults_get_integer(
  389. X        "ftptool.LocalSortOrder", "Ftptool.LocalSortOrder", ASCENDING);
  390. X
  391. X    local_showdotfiles = defaults_get_boolean(
  392. X        "ftptool.LocalShowHiddenFiles", "Ftptool.LocalShowHiddenFiles", FALSE);
  393. X
  394. X    group_local_files  = defaults_get_boolean(
  395. X        "ftptool.LocalSortGrouping", "Ftptool.LocalSortGrouping", FALSE);
  396. X
  397. X    anonftp_password = defaults_get_string(
  398. X        "ftptool.InitialPassword", "Ftptool.InitialPassword", (char *)NULL);
  399. X
  400. X    
  401. X    if (anonftp_password)
  402. X        anonftp_password = strdup(anonftp_password);
  403. X
  404. X    default_viewer = defaults_get_string(
  405. X        "ftptool.DefaultViewer", "Ftptool.DefaultViewer", "textedit %f");
  406. X
  407. X    default_viewer = strdup(default_viewer);
  408. X
  409. X    archive_viewer = defaults_get_string(
  410. X        "ftptool.ArchiveViewer", "Ftptool.ArchiveViewer", program_name);
  411. X
  412. X    archive_viewer = strdup(archive_viewer);
  413. X
  414. X    postscript_viewer = defaults_get_string(
  415. X        "ftptool.PostScriptViewer", "Ftptool.PostScriptViewer", "pageview %f");
  416. X
  417. X    postscript_viewer = strdup(postscript_viewer);
  418. X
  419. X    openlook_mode = defaults_get_boolean(
  420. X        "ftptool.OpenLookMode", "Ftptool.OpenLookMode", TRUE);
  421. X
  422. X    ignore_case = defaults_get_boolean(
  423. X        "ftptool.IgnoreCase", "Ftptool.IgnoreCase", FALSE);
  424. X
  425. X    /* Windows */
  426. X
  427. X    host_window.visible = defaults_get_boolean(
  428. X        "ftptool.HostInfoVisible", "Ftptool.HostInfoVisible", FALSE);
  429. X
  430. X    host_window.advanced.visible = defaults_get_boolean(
  431. X        "ftptool.HostInfoAdvancedVisible", "Ftptool.HostInfoAdvancedVisible", 
  432. X        FALSE);
  433. X
  434. X    local_window.visible = defaults_get_boolean(
  435. X        "ftptool.LocalWindowVisible", "Ftptool.LocalWindowVisible", FALSE);
  436. X
  437. X    schedule_window.visible = defaults_get_boolean(
  438. X        "ftptool.BatchWindowVisible", "Ftptool.BatchWindowVisible",FALSE);
  439. X
  440. X    status_window.visible = defaults_get_boolean(
  441. X        "ftptool.StatusWindowVisible", "Ftptool.StatusWindowVisible",FALSE);
  442. X
  443. X    strcpy(base_window.geometry, 
  444. X        defaults_get_string("ftptool.RemoteWindowGeometry",
  445. X            "Ftptool.RemoteWindowGeometry", "")); 
  446. X
  447. X    strcpy(local_window.geometry, 
  448. X        defaults_get_string("ftptool.LocalWindowGeometry",
  449. X            "Ftptool.LocalWindowGeometry", "")); 
  450. X
  451. X    strcpy(host_window.geometry, 
  452. X        defaults_get_string("ftptool.HostWindowGeometry",
  453. X            "Ftptool.HostWindowGeometry", "")); 
  454. X
  455. X    strcpy(schedule_window.geometry, 
  456. X        defaults_get_string("ftptool.BatchWindowGeometry",
  457. X            "Ftptool.BatchWindowGeometry", "")); 
  458. X
  459. X    strcpy(session_window.geometry, 
  460. X        defaults_get_string("ftptool.SessionWindowGeometry",
  461. X            "Ftptool.SessionWindowGeometry", "")); 
  462. X
  463. X    strcpy(status_window.geometry, 
  464. X        defaults_get_string("ftptool.StatusWindowGeometry",
  465. X            "Ftptool.StatusWindowGeometry", "")); 
  466. }
  467. X
  468. #ifdef USE_PROTOTYPES
  469. void set_xdefaults(void)
  470. #else
  471. void set_xdefaults()
  472. #endif
  473. {
  474. X    char    *str;
  475. X
  476. X    defaults_set_boolean("ftptool.LogSession", logging & 0x1);
  477. X
  478. X    defaults_set_boolean("ftptool.KeepConnectionAlive", keepalive & 0x2);
  479. X
  480. X    defaults_set_boolean("ftptool.GenUniqueLocalNames", 
  481. X        unique_local_names & 0x1);
  482. X
  483. X    defaults_set_boolean("ftptool.GenUniqueRemoteNames", 
  484. X        unique_remote_names & 0x2);
  485. X
  486. X    defaults_set_boolean("ftptool.ConfirmDeletes", confirmdeletes);
  487. X
  488. X    defaults_set_boolean("ftptool.AutoConnect", auto_connect & 0x1);
  489. X
  490. X    defaults_set_boolean("ftptool.AutoShowStatus", show_status & 0x2);
  491. X
  492. X    defaults_set_boolean("ftptool.TryProxy", try_proxy & 0x4);
  493. X
  494. X    defaults_set_integer("ftptool.DirectoryCacheSize", dircache_size);
  495. X
  496. X    switch(remote_sort_mode) {
  497. X    default:
  498. X        fprintf(stderr, "Unknown remote sort mode in set_xdefaults.\n");
  499. X        /* Fall through */
  500. X    case SORTBYNAME:
  501. X        str = "Name";
  502. X        break;
  503. X    case SORTBYDATE:
  504. X        str = "Date";
  505. X        break;
  506. X    case SORTBYSIZE:
  507. X        str = "Size";
  508. X        break;
  509. X    }
  510. X    defaults_set_string("ftptool.SortField", str);
  511. X
  512. X    defaults_set_integer("ftptool.SortOrder", remote_sort_direction);
  513. X
  514. X    defaults_set_boolean("ftptool.ShowHiddenFiles", remote_showdotfiles);
  515. X
  516. X    defaults_set_boolean("ftptool.SortGrouping", group_remote_files);
  517. X
  518. X    switch(local_sort_mode) {
  519. X    default:
  520. X        fprintf(stderr, "Unknown local sort mode in set_xdefaults.\n");
  521. X        /* Fall through */
  522. X    case SORTBYNAME:
  523. X        str = "Name";
  524. X        break;
  525. X    case SORTBYDATE:
  526. X        str = "Date";
  527. X        break;
  528. X    case SORTBYSIZE:
  529. X        str = "Size";
  530. X        break;
  531. X    }
  532. X
  533. X    defaults_set_string("ftptool.LocalSortField", str);
  534. X
  535. X    defaults_set_integer("ftptool.LocalSortOrder", local_sort_direction);
  536. X
  537. X    defaults_set_boolean("ftptool.LocalShowHiddenFiles", local_showdotfiles);
  538. X
  539. X    defaults_set_boolean("ftptool.LocalSortGrouping", group_local_files);
  540. X
  541. X    defaults_set_boolean("ftptool.OpenLookMode", openlook_mode);
  542. X
  543. X    defaults_set_string("ftptool.DefaultViewer", default_viewer);
  544. X
  545. X    defaults_set_string("ftptool.ArchiveViewer", archive_viewer);
  546. X
  547. X    defaults_set_string("ftptool.PostScriptViewer", postscript_viewer);
  548. X
  549. X    defaults_set_string("ftptool.InitialPassword", anonftp_password);
  550. X
  551. }
  552. X
  553. #ifdef USE_PROTOTYPES
  554. void save_xdefaults(void)
  555. #else
  556. void save_xdefaults()
  557. #endif
  558. {
  559. X    char    *filename=NULL;
  560. X    FILE    *fp;
  561. X    char    *str;
  562. X    char    *true = "True";
  563. X    char    *false = "False";
  564. X
  565. X    filename = find_dotfile(FTPTOOL_DEFAULTS);
  566. X    if (filename == NULL)
  567. X        if ((filename = create_dotfile(FTPTOOL_DEFAULTS, 0644)) == NULL)
  568. X            return;
  569. X    if ((fp = fopen(filename, "w")) == NULL) {
  570. X        footer_message("Could not save defaults: %s", sys_errlist[errno],
  571. X            (char *)NULL);
  572. X        return;
  573. X    }
  574. X    fprintf(fp, "ftptool.ArchiveViewer:\t%s\n", archive_viewer);
  575. X    fprintf(fp, "ftptool.AutoConnect:\t%s\n", 
  576. X        (auto_connect == 0) ? false : true);
  577. X    fprintf(fp, "ftptool.AutoShowStatus:\t%s\n", 
  578. X        ((show_status & 2) == 0) ? false : true);
  579. X    fprintf(fp, "ftptool.ConfirmDeletes:\t%s\n", 
  580. X        (confirmdeletes == 0) ? false : true);
  581. X    fprintf(fp, "ftptool.DefaultViewer:\t%s\n", default_viewer);
  582. X    fprintf(fp, "ftptool.DirectoryCacheSize:\t%d\n", dircache_size);
  583. X    fprintf(fp, "ftptool.GenUniqueLocalNames:\t%s\n", 
  584. X        ((unique_local_names & 1) == 0) ? false : true);
  585. X    fprintf(fp, "ftptool.GenUniqueRemoteNames:\t%s\n", 
  586. X        ((unique_remote_names & 2) == 0) ? false : true);
  587. X    fprintf(fp, "ftptool.IgnoreCase:\t%s\n", 
  588. X        (ignore_case == 0) ? false : true);
  589. X    fprintf(fp, "ftptool.InitialPassword:\t%s\n", anonftp_password);
  590. X    fprintf(fp, "ftptool.KeepConnectionAlive:\t%s\n", 
  591. X        ((keepalive & 2) == 0) ? false : true);
  592. X
  593. X    fprintf(fp, "ftptool.LocalShowHiddenFiles:\t%s\n", 
  594. X        (local_showdotfiles == 0) ? false : true);
  595. X
  596. X    switch(local_sort_mode) {
  597. X    default:
  598. X        fprintf(stderr, "Unknown local sort mode in save_xdefaults.\n");
  599. X        /* Fall through */
  600. X    case SORTBYNAME:
  601. X        str = "Name";
  602. X        break;
  603. X    case SORTBYDATE:
  604. X        str = "Date";
  605. X        break;
  606. X    case SORTBYSIZE:
  607. X        str = "Size";
  608. X        break;
  609. X    }
  610. X    fprintf(fp, "ftptool.LocalSortField:\t%s\n", str);
  611. X    fprintf(fp, "ftptool.LocalSortGrouping:\t%d\n", group_local_files);
  612. X    fprintf(fp, "ftptool.LocalSortOrder:\t%d\n", local_sort_direction);
  613. X
  614. X    fprintf(fp, "ftptool.LogSession:\t%s\n", 
  615. X        ((logging & 1) == 0) ? false : true);
  616. X    fprintf(fp, "ftptool.OpenLookMode:\t%s\n", 
  617. X        (openlook_mode == 0) ? false : true);
  618. X    fprintf(fp, "ftptool.PostScriptViewer:\t%s\n", postscript_viewer);
  619. X
  620. X    fprintf(fp, "ftptool.ShowHiddenFiles:\t%s\n", 
  621. X        (remote_showdotfiles == 0) ? false : true);
  622. X    switch(remote_sort_mode) {
  623. X    default:
  624. X        fprintf(stderr, "Unknown remote sort mode in save_xdefaults.\n");
  625. X        /* Fall through */
  626. X    case SORTBYNAME:
  627. X        str = "Name";
  628. X        break;
  629. X    case SORTBYDATE:
  630. X        str = "Date";
  631. X        break;
  632. X    case SORTBYSIZE:
  633. X        str = "Size";
  634. X        break;
  635. X    }
  636. X    fprintf(fp, "ftptool.SortField:\t%s\n", str);
  637. X    fprintf(fp, "ftptool.SortGrouping:\t%d\n", group_remote_files);
  638. X    fprintf(fp, "ftptool.SortOrder:\t%d\n", remote_sort_direction);
  639. X
  640. X    fprintf(fp, "ftptool.TryProxy:\t%s\n", 
  641. X        (try_proxy == 0) ? false : true);
  642. X
  643. X    fclose(fp);
  644. X    footer_message("Defaults saved to %s.", filename, (char *)NULL);
  645. X    free(filename);
  646. }
  647. SHAR_EOF
  648. echo 'File main.c is complete' &&
  649. chmod 0644 main.c ||
  650. echo 'restore of main.c failed'
  651. Wc_c="`wc -c < 'main.c'`"
  652. test 18317 -eq "$Wc_c" ||
  653.     echo 'main.c: original size 18317, current size' "$Wc_c"
  654. rm -f _shar_wnt_.tmp
  655. fi
  656. # ============= ftptool.man ==============
  657. if test -f 'ftptool.man' -a X"$1" != X"-c"; then
  658.     echo 'x - skipping ftptool.man (File already exists)'
  659.     rm -f _shar_wnt_.tmp
  660. else
  661. > _shar_wnt_.tmp
  662. echo 'x - extracting ftptool.man (Text)'
  663. sed 's/^X//' << 'SHAR_EOF' > 'ftptool.man' &&
  664. .TH FTPTOOL 1 "22 June 1992" "X Version 11"
  665. .SH NAME
  666. ftptool \- A windowed interface to ftp.
  667. .SH SYNOPSIS
  668. .B ftptool 
  669. [
  670. .I 
  671. generic-tool-arguments 
  672. ]
  673. [
  674. .I 
  675. filename.tar
  676. ]
  677. .SH DESCRIPTION
  678. .LP
  679. Ftptool is a (hopefully) easier interface to ftp. It hides the interaction with
  680. ftp and the need for knowing commands like 'get' and 'put', and the difference
  681. between 'get' and 'mget'. It provides the ability to transfer directories, 
  682. which ftp by itself does not do, and has an extended form of ftp's .netrc file.
  683. .SH OPTIONS
  684. .TP
  685. .B generic-tool-arguments
  686. ftptool (should) accept the generic tool arguments described in xview(1).
  687. .TP
  688. .B filename.tar
  689. The argument is a tar file (extension .tar). Instead of starting up as ftptool,
  690. start up to examine the tar file. This is a simple tool to list the contents
  691. of the tar file, and extract into a specified directory. Provided in this
  692. manner to avoid a proliferation of programs.
  693. .SH USAGE
  694. .SS .Xdefaults File Options
  695. .LP
  696. You can specify a number of defaults using the .Xdefaults file. These can all
  697. be set using the Properties window (options affecting window placement or
  698. visibility are currently set depending on the current window configuration). 
  699. Other than those controlling the size and placement of the windows, the 
  700. options are, with the first value being the default:
  701. X
  702. .in +4
  703. X
  704. ftptool.ArchiveViewer              (ftptool)
  705. ftptool.AutoConnect                (False/True)
  706. ftptool.AutoShowStatus             (False/True)
  707. ftptool.BatchWindowVisible         (False/True)
  708. ftptool.ConfirmDeletes             (True/False)
  709. ftptool.DefaultViewer              (textedit %f)
  710. ftptool.DirectoryCacheSize         (5 {0 - 20})
  711. ftptool.GenUniqueLocalNames        (False/True)
  712. ftptool.GenUniqueRemoteNames       (False/True)
  713. ftptool.HostInfoVisible            (False/True)
  714. ftptool.HostInfoAdvancedVisible    (False/True)
  715. ftptool.IgnoreCase                 (False/True)
  716. ftptool.InitialPassword            (login@hostname)
  717. ftptool.KeepConnectionAlive        (False/True)
  718. ftptool.LocalShowHiddenFiles       (False/True)
  719. ftptool.LocalSortField             (Name/Date/Size)
  720. ftptool.LocalSortGrouping          (False/True)
  721. ftptool.LocalSortOrder             (0/1) {Alphabetical}
  722. ftptool.LocalWindowVisible         (False/True)
  723. ftptool.LogSession                 (False/True)
  724. ftptool.OpenLookMode               (True/False)
  725. ftptool.PostScriptViewer           (pageview %f)
  726. ftptool.ShowHiddenFiles            (False/True)
  727. ftptool.SortField                  (Name/Date/Size)
  728. ftptool.SortGrouping               (False/True)
  729. ftptool.SortOrder                  (0/1) {Alphabetical}
  730. ftptool.TryProxy                            (False/True)
  731. X
  732. .in -4
  733. .LP
  734. When saving defaults, ftptool now saves them in .ftptooldefaults in your
  735. home directory (overwritting the existing information).
  736. .SS Batch mode
  737. .LP
  738. Ftptool has a batch mode. Instead of selecting files in a directory, then having
  739. to transfer all those files before leaving the directory, selections will
  740. be saved in either a Send or Receive list. When you finally decide to copy
  741. the files, they will all be copied at once (and they can be in different
  742. directories). The hierarchy on the source machine is duplicated starting
  743. at the current directory on the destination machine. For example, if you 
  744. have these files in your Batch Receive list:
  745. .in +4
  746. X    /export/source/BSD
  747. X    /usr/source/Games/NetHack3.10.tar.Z
  748. X    /pub/gnu/gcc.tar.Z
  749. .in -4
  750. If your current local directory is /var/tmp, copying these to the local 
  751. machine will create the files:
  752. .in +4
  753. X    /var/tmp/export/source/BSD
  754. X    /var/tmp/usr/source/Games/NetHack3.10.tar.Z
  755. X    /var/tmp/pub/gnu/gcc.tar.Z
  756. .in -4
  757. (and any other directories and files that are in a selected directory. 
  758. Directories are recursively copied, as always). When this occurs is determined
  759. by the Batch window.
  760. X
  761. .SS The Remote Window
  762. .LP
  763. This is where you usually interact with ftptool. It operates from the various
  764. buttons described below.
  765. X
  766. .sp .5
  767. .B File Menu
  768. .sp .5
  769. .RS
  770. .TP 10
  771. .B Copy
  772. Copy selected files and/or directories from the local machine to the remote
  773. machine, or from the remote machine to the local machine.
  774. .TP
  775. .B Delete
  776. Delete selected files from the local machine, or the remote machine.
  777. .TP
  778. .B List Directory
  779. List the current remote directory in the Session Log window. There are
  780. two options, DIR and LS. They do the corresponding ftp commands. DIR can
  781. be used to determine the output format of the host, so you can set the
  782. DIR template appropriately.
  783. .TP
  784. .B Compress File
  785. Compress the selected local files.
  786. .TP
  787. .B Uncompress File
  788. Uncompress the selected local files.
  789. .TP
  790. .B Create Tar File
  791. Create a tar file containing the selected local files.
  792. .TP
  793. .B Extract Tar File
  794. Extract the selected tar files. This starts the 'tar viewer' for each file, 
  795. which by default is ftptool.
  796. .RE
  797. .LP
  798. .B View Menu
  799. .sp .5
  800. .RS
  801. .TP 10
  802. .B Remote File
  803. Transfer the remote file to a temporary directory, uncompress if necessary,
  804. then start the appropriate file viewer on the file. This will be the tar
  805. viewer if the file ends in .tar, pageview if it is a PostScript file, or
  806. the default viewer (textedit) otherwise.
  807. .TP
  808. .B Local File
  809. Uncompress if necessary, then start the appropriate file viewer on the file.
  810. This will be the tar viewer if the file ends in .tar, pageview if it is a
  811. PostScript file, or the default viewer (textedit) otherwise.
  812. .TP
  813. .B Local Directory List
  814. Show the local directory window.
  815. .TP
  816. .B Session Log
  817. Show the session log window. Only active if logging is enabled.
  818. .TP
  819. .B Host Information
  820. Show the host information window.
  821. .TP
  822. .B Transfer Status
  823. Show the transfer status window.
  824. .TP
  825. .B Batch Schedule
  826. Show the Batch Schedule window
  827. .TP
  828. .B About Ftptool
  829. Show the About window.
  830. .RE
  831. .LP
  832. .LP
  833. .B Properties Menu
  834. .sp .5
  835. .RS
  836. .TP 10
  837. .B Tool Properties
  838. Bring up the tool properties window. See the Properties section.
  839. .TP
  840. .B Local File
  841. Show the local file properties window. This shows such elements as
  842. permissions, owner, and group for the last selected file.
  843. .TP
  844. .B Remote File
  845. Show the remote file properties window. This shows such elements as
  846. permissions, owner, and group for the last selected file. If connected
  847. to a non-UNIX machine, or one that has non-ls style 'dir' command output,
  848. most fields will be "unknown".
  849. .TP
  850. .B Save Layout
  851. Save the layout of ftptool. This includes the sizes of the windows, and
  852. whether some of them are visibile. The layout is now saved in the 
  853. file .ftptooldefaults in your home directory.
  854. .RE
  855. .TP
  856. .B Connect Button
  857. Try to connect to the host listed in the Host Information window. If
  858. that window is not displayed, it will be displayed and a connection
  859. will not be attempted.
  860. .TP
  861. .B Abort Button
  862. Active only during a transfer. Abort the transfer of all the files selected
  863. after the current one completes.
  864. .TP
  865. .B Remote Directory Field
  866. Shows the current remote directory. This field is also editable, so you can
  867. type in a directory and press return to change to it.
  868. .TP
  869. .B Remote Directory List
  870. List of remote files in the current remote directory. Directories are
  871. in bold, with a trailing '/'. You can double-click on a directory to change
  872. to it, or use the pop-up menu. Sorting is controlled by properties. Several
  873. useful functions are in the pop-up menu.
  874. .SS Host Information Window
  875. .TP
  876. .B New Connection
  877. Selecting this button clears the fields in the window. This would be selected
  878. if you wish to connect to a new site. It does not try to connect.
  879. .TP
  880. .B Hosts
  881. This is a menu of the hosts in your host list. Selecting a host fills in
  882. the information below. In addition, if auto-connect is set, it will try
  883. to connect to the host.
  884. .TP
  885. .B Host List
  886. .sp .5
  887. .RS
  888. .TP 10
  889. .B Save
  890. Save the current host list. It will attempt to save to a file named .ftptoolrc
  891. in your home directory. If that fails, it goes to the current directory.
  892. .TP
  893. .B Load 
  894. Load the current host list. It will attempt to load from a file named .ftptoolrc
  895. in your home directory. If that fails, it looks in your current directory.
  896. .TP
  897. .B Append .netrc
  898. When ftptool is first started, it automatically reads the .ftptoolrc file.
  899. If that is not found, it will look for a .netrc file and load from that using
  900. a (very) basic method. If you already have a .ftptoolrc, and want to load
  901. the .netrc too, use this option (this is primarily for earlier versions that
  902. did not read the .netrc).
  903. .B Add 
  904. Add the current information into the list, based on the name in
  905. the Alias field.
  906. .TP
  907. .B Change
  908. This is the same as Add, but it will not ask for confirmation if the
  909. alias already exists.
  910. .TP
  911. .B Delete
  912. Delete the alias named by the Alias field from the list.
  913. .RE
  914. .LP
  915. .TP
  916. .B The Plus Button
  917. When pressed, show the more advanced options of ftptool. There is
  918. a companion Minus button which will hide those options.
  919. .TP
  920. .B Alias
  921. The alias name. When .netrc entries are loaded, they appear as 'machine login'.
  922. .TP
  923. .B Last Visited
  924. The last time you successfully connected to the host described by this alias.
  925. If you have never connected, then "Never" is displayed. When ftptool updates
  926. this field, the host alias list is marked as modified. It is not automatically
  927. saved for you at this point. This field is only updated if you connect through
  928. the host list, and not the current host window.
  929. .B Comment
  930. A comment describing this ftp sit (X sources, GNU software).
  931. .TP
  932. .B Proxy Host
  933. The name of the host supporting proxy ftp. ftptool handles this the
  934. way the Iftp program does (which is part of some consulting special).
  935. .TP
  936. .B Remote Host
  937. The name of the remote host.
  938. .TP
  939. .B Login
  940. The login name to use on the remote host.
  941. .TP
  942. .B Password
  943. The password to give on the remote host. Characters in your password will 
  944. be displayed as '*'. In the .ftptoolrc file, this field will be encrypted.
  945. WARNING: The encryption algorithm is fairly simple, and made even more
  946. breakable since ftptool source is freely available. Encrypting the password
  947. allows you to look at it without divulging your passwords, but is not
  948. unbreakable. For this reason, the .ftptoolrc file is mode 600.
  949. .TP
  950. .B Transfer Mode
  951. The mode of transfer to use on the remote host. Before any transfer, this
  952. is read, so you can change it as you work.
  953. .TP
  954. .B Remote Directory
  955. The remote directory to change to upon connection. Perhaps you always want to
  956. go to /pub/gnu on prep.ai.mit.edu.
  957. .TP
  958. .B Local Directory
  959. The local directory to change to upon connection. Perhaps you always want to
  960. go to /home/gnu when connecting to prep.ai.mit.edu.
  961. .TP
  962. .B DIR Template
  963. Since ftptool can not know the format the 'dir' command (which is used to 
  964. fill the remote list) displays on each host, you can tell ftptool the
  965. format on a per-host basis. ftptool uses a default format, so unless
  966. you have problems, you probably should leave it alone. If you need to
  967. determine the format, either connect using normal ftp, or connect with
  968. ftptool and use 'dir' in the Custom field. This will display in the session
  969. window, so make sure you are logging.
  970. X
  971. The template is a series of keywords separated by whitespace or characters
  972. that must match (so if there are dashes in the date, you theoretically
  973. give MONTH-DAY-YEAR). The keywords are:
  974. .in +4
  975. .nf
  976. PERMS - Normal UNIX permissions (drwxrwxrwx)
  977. LINKS - Link count. Currently matched, but discarded.
  978. USER - User name/number
  979. GROUP - Group name/number
  980. SIZE - File size
  981. MONTH - Month (Dec, Jan, ...)
  982. DAY     - Day of week (number)
  983. TIME - Hour:minute (09:49) or year (1991)
  984. NAME - Filename.
  985. SKIP - Discard characters until the next whitespace.
  986. .fi
  987. .in -4
  988. Anything else must be matched exactly. The default is given in ftptool.h
  989. as:
  990. .in +4
  991. PERMS LINKS USER GROUP SIZE MONTH DAY TIME NAME
  992. .in -4
  993. which matches the 'ls -lg' output:
  994. X
  995. .nf
  996. -rw-r--r--  1 mike_s   develop      8636 Dec 20 09:49 transfer.o
  997. .fi
  998. A special case is the pattern NONUNIX. If this is present anywhere
  999. in the template, it sets non-UNIX mode. Ftptool will only use 'ls' to
  1000. get directory listings, and will not expand environment variables
  1001. when trying to cd with the Remote Directory text field.
  1002. Also, ftptool will assume that all directory entries are normal files.
  1003. You can still attempt to double-click on the files to cd, though.
  1004. X
  1005. Another special case is the pattern LOWERNAMES. This causes all file
  1006. names read from the remote machine to be converted to lowercase. This
  1007. is for those machines that output data in uppercase, but can't handle
  1008. it in return (such as VMS).
  1009. X
  1010. .SS Local Directory Window
  1011. .TP
  1012. .B Local Directory Field
  1013. Shows the current local directory. This field is also editable, so you can
  1014. type in a directory and press return to change to it.
  1015. .TP
  1016. .B Free Space
  1017. Gives the amount and percentage of free space available in the file system
  1018. the directory is in.
  1019. .TP
  1020. .B Local Directory List
  1021. List of local files in the current local directory. Directories are
  1022. in bold, with a trailing '/'. You can double-click on a directory to change
  1023. to it, or use the pop-up menu. Sorting is controlled by properties. Several
  1024. useful functions are in the pop-up menu.
  1025. X
  1026. .SS Session Log Window
  1027. .LP
  1028. Shows all data sent to ftp, as well as all responses from ftp. This is
  1029. primarily for debugging, but is also useful if the remote machine shows
  1030. a message of the day.
  1031. X
  1032. .SS Transfer Status Window
  1033. .LP
  1034. This shows you how far along each file transfer is. It shows the name
  1035. and transfer direction, the size, and a gauge showing the percent complete.
  1036. It updates every 8K block transferred.
  1037. X
  1038. .SS Batch Schedule Window
  1039. .LP
  1040. This allows you to perform batch transfers. The Batch Send list 
  1041. shows all the files pending transfer from the local host to the remote host,
  1042. and the Batch Receive list shows all the files pending transfer from the remote
  1043. host to the local one. Only one list is shown at a time, based on the
  1044. setting of the Action item. Addition to a list is performed by selecting the 
  1045. files (or directories) in either the Remote Window (for the Receive list) or 
  1046. the Local Window (for the Send list), then selecting the 'Add to Batch List'
  1047. option on the list pop-up. Deletion or starting the batch transfer is
  1048. accomplished in the list pop-up. To schedule a batch transfer, construct
  1049. a list, and use Set Current to create the appropriate batch name. Then,
  1050. set appropriate parameters on the Host Information window (such as the
  1051. remote and local directories). Also, set the time for the transfer. You
  1052. can do this for multiple hosts, but nothing will happen until you choose
  1053. the Process Batch item. At that point, the batch list will be processed.
  1054. Make sure that you bring up the session log before you start or you will
  1055. not have a log.
  1056. X
  1057. .SS About Ftptool Window
  1058. .LP
  1059. Shows information about Ftptool. Who I am, why it was written, and a few
  1060. credits. Also allows you to send feedback to me.
  1061. X
  1062. .SS Properties
  1063. .LP
  1064. In addition to the properties listed below, applying your properties will
  1065. also save the current state of your pop-up windows (visible or non-visible).
  1066. At this time, location is not saved.
  1067. X
  1068. .RE
  1069. .LP
  1070. .TP
  1071. .B Ftptool options
  1072. .sp .5
  1073. .RS
  1074. .TP 10
  1075. .B FTP options
  1076. The Log Session option causes ftptool to display the Session Log, and
  1077. to actually write to it. The Keep Connection Alive option is not part of ftp, 
  1078. but by choosing it ftptool will send a command every 10 minutes so that the 
  1079. remote server does not time out and disconnect (which it does after 15 
  1080. minutes of inactivity).
  1081. .TP
  1082. .B Generate unique
  1083. The Local Filenames options cause ftptool to generate unique local
  1084. filenames of the form N.filename, where N is a number, if filename
  1085. already exists on the local machine. The Remote Filenames option
  1086. causes ftptool to use the Store Unique FTP command when sending
  1087. files, to make the remote server generate unique filenames if filename
  1088. exists.
  1089. .TP
  1090. .B Automatically
  1091. The Connect option causes ftptool to try to immediately try to connect 
  1092. to the host selected from the Hosts menu. The Show Status option forces
  1093. the Transfer Status window to be displayed when beginning a transfer.
  1094. The Try Sun Proxy FTP option causes ftptool to automatically try to 
  1095. use Sun's proxy FTP (from Sun Consulting) if it cannot resolve the 
  1096. hostname (the host is unknown) or it receives a 'Network unreachable' 
  1097. error when connecting.  This is primarily used by Sun folks trying 
  1098. to get out to the Internet.
  1099. .TP
  1100. .B Window manager
  1101. If selected, ftptool assumes it is running under an OPEN LOOK Window Manager,
  1102. and does not provide a Quit button. Also, Viewing a window that is 
  1103. already displayed will cause it to be hidden.
  1104. .TP
  1105. .B Initial Password
  1106. The initial password to use, primarily for anonymous ftp.
  1107. .TP
  1108. .B Case sensitivity
  1109. Controls whether or not to respect the case of characters when
  1110. sorting the Hosts menu and the directory lists.
  1111. .TP
  1112. .B Deletions
  1113. Controls whether or not to request confirmation when deleting files. If
  1114. you delete directories with this on, it will ask for each file in the
  1115. directory.
  1116. .RE
  1117. .LP
  1118. .TP
  1119. .B Directory List options
  1120. .sp .5
  1121. .RS
  1122. .TP 10
  1123. .B Unlimit Cache Size
  1124. This option causes ftptool to cache _all_ directories. It could be quite 
  1125. a memory waster.
  1126. .TP
  1127. .B Directory Cache Size
  1128. Determines how many directory listings ftptool will remember. This is managed 
  1129. as an LRU cache, so every time you CD into a directory ftptool first looks in 
  1130. the cache. If it finds it, then instead of actually reading the directory it 
  1131. just displays the list in the cache. This can speed up directory listings on 
  1132. slow links.  The larger you make the cache, the more memory you will use and 
  1133. (if you keep listing the same directories) the less likely you'll have to 
  1134. talk to the remote server. However, the larger the cache, the less likely it 
  1135. is that you'll see any changes being made on the cached directories. To 
  1136. effectively not cache at all, set this to 1. 
  1137. There are two caches, one for local directories and one for remote. 
  1138. This property controls both (setting it to 2 actually means you'll
  1139. cache 4 directories: 2 local and 2 remote). 
  1140. .TP
  1141. .B Sort remote files by
  1142. Controls which field in the remote file list to sort by
  1143. You can sort by name, date, size, or type.
  1144. .TP
  1145. .B Sort order
  1146. Controls how to sort the field. For sorting by name: either alphabetical 
  1147. or reverse alphabetical. For sorting by the date: either least recently
  1148. changed or most recently changed. For sorting by the size: either smallest 
  1149. first or largest first. For sorting by type: either alphabetical or
  1150. reverse alphabetical (within the types of files).
  1151. .TP
  1152. .B Hidden files
  1153. Controls whether or not to display hidden files (those beginning with a
  1154. period).
  1155. .TP
  1156. .B Group files by type
  1157. If set, then files are grouped by types (directories first, then regular
  1158. files, ...) in addition to being sorted as normal.
  1159. .TP
  1160. .B Sort local files by
  1161. Controls which field in the local file list to sort by
  1162. You can sort by name, date, size, or type.
  1163. .TP
  1164. .B Sort order
  1165. Controls how to sort the field. For sorting by name: either alphabetical 
  1166. or reverse alphabetical. For sorting by the date: either least recently
  1167. changed or most recently changed. For sorting by the size: either smallest 
  1168. first or largest first. For sorting by type: either alphabetical or
  1169. reverse alphabetical (within the types of files).
  1170. .TP
  1171. .B Hidden files
  1172. Controls whether or not to display hidden files (those beginning with a
  1173. period).
  1174. .TP
  1175. .B Group files by type
  1176. If set, then files are grouped by types (directories first, then regular
  1177. files, ...) in addition to being sorted as normal.
  1178. .RE
  1179. .LP
  1180. .TP
  1181. .B Viewer options
  1182. .sp .5
  1183. .RS
  1184. .TP 10
  1185. .B File viewer
  1186. The default viewer for files of unknown (usually text) type. This is a
  1187. command line, which will be broken up into arguments. '%f' will be
  1188. replaced by the file name to view; if not specified, the file name will
  1189. be passed as the last argument.
  1190. .TP
  1191. .B Archive viewer
  1192. The program to use to view archives, which right now are 'tar' archives.
  1193. This is a command line, which will be broken up into arguments. '%f' 
  1194. will be replaced by the file name to view; if not specified, the file 
  1195. name will be passed as the last argument.
  1196. .TP
  1197. .B PostScript viewer
  1198. The program to use to view PostScript files. This is a command line, 
  1199. which will be broken up into arguments. '%f' will be replaced by the 
  1200. file name to view; if not specified, the file name will be passed
  1201. as the last argument.
  1202. .SH AUTHOR
  1203. .RE
  1204. .LP
  1205. Mike Sullivan (Mike.Sullivan@Sun.COM)
  1206. SHAR_EOF
  1207. chmod 0644 ftptool.man ||
  1208. echo 'restore of ftptool.man failed'
  1209. Wc_c="`wc -c < 'ftptool.man'`"
  1210. test 20101 -eq "$Wc_c" ||
  1211.     echo 'ftptool.man: original size 20101, current size' "$Wc_c"
  1212. rm -f _shar_wnt_.tmp
  1213. fi
  1214. # ============= misc.c ==============
  1215. if test -f 'misc.c' -a X"$1" != X"-c"; then
  1216.     echo 'x - skipping misc.c (File already exists)'
  1217.     rm -f _shar_wnt_.tmp
  1218. else
  1219. > _shar_wnt_.tmp
  1220. echo 'x - extracting misc.c (Text)'
  1221. sed 's/^X//' << 'SHAR_EOF' > 'misc.c' &&
  1222. #include "ftptool.h"
  1223. X
  1224. #ifdef USE_PROTOTYPES
  1225. void log_char(char ch)
  1226. #else
  1227. void log_char(ch)
  1228. char    ch;
  1229. #endif
  1230. {
  1231. X    if (logging) {
  1232. X        if (textsw_insert(session_window.log, &ch, 1) != 1) {
  1233. X            logging = 0;
  1234. X            xv_set(tool_property_window.ftptool.options,
  1235. X                PANEL_VALUE, logging | keepalive,
  1236. X                NULL);
  1237. X        }
  1238. X    }
  1239. }
  1240. X
  1241. #ifdef USE_PROTOTYPES
  1242. void log_message(char *s)
  1243. #else
  1244. void log_message(s)
  1245. char    *s;
  1246. #endif
  1247. {
  1248. X    if (logging) {
  1249. X        if (textsw_insert(session_window.log, s, strlen(s)) != strlen(s)) {
  1250. X            logging = 0;
  1251. X            xv_set(tool_property_window.ftptool.options,
  1252. X                PANEL_VALUE, logging | keepalive,
  1253. X                NULL);
  1254. X        }
  1255. X    }
  1256. }
  1257. X
  1258. #ifdef USE_PROTOTYPES
  1259. char    *ftp_error(char ch, char *def)
  1260. #else
  1261. char    *ftp_error(ch, def)
  1262. char    ch;
  1263. char    *def;
  1264. #endif
  1265. {
  1266. X    char    *str;
  1267. X    char    *nl;
  1268. X
  1269. X    if (str = index(response_line, ch)) {
  1270. X        if (nl = index(str, '\n'))
  1271. X            *nl = '\0';
  1272. X        return str+1;
  1273. X    }
  1274. X    return def;
  1275. }
  1276. X
  1277. #ifdef USE_PROTOTYPES
  1278. void footer_message(char *format, ...)
  1279. #else
  1280. /*VARARGS0*/
  1281. void footer_message(va_alist)
  1282. va_dcl
  1283. #endif
  1284. {
  1285. #ifndef USE_PROTOTYPES
  1286. X    char    *format;
  1287. #endif
  1288. X    va_list    argptr;
  1289. X    static char    scratch[MAXPATHLEN + 1];
  1290. X
  1291. #ifdef USE_PROTOTYPES
  1292. X    va_start(argptr, format);
  1293. #else
  1294. X    va_start(argptr);
  1295. X    format = (char *)va_arg(argptr, char *);
  1296. #endif
  1297. X    vsprintf(scratch, format, argptr);
  1298. X    xv_set(base_window.frame, 
  1299. X        FRAME_LEFT_FOOTER, scratch, 
  1300. X        NULL);
  1301. X    va_end(argptr);
  1302. }
  1303. X
  1304. #ifdef USE_PROTOTYPES
  1305. void local_footer_message(char *format, ...)
  1306. #else
  1307. /*VARARGS0*/
  1308. void local_footer_message(va_alist)
  1309. va_dcl
  1310. #endif
  1311. {
  1312. #ifndef USE_PROTOTYPES
  1313. X    char    *format;
  1314. #endif
  1315. X    va_list    argptr;
  1316. X    static char    scratch[MAXPATHLEN + 1];
  1317. X
  1318. #ifdef USE_PROTOTYPES
  1319. X    va_start(argptr, format);
  1320. #else
  1321. X    va_start(argptr);
  1322. X    format = (char *)va_arg(argptr, char *);
  1323. #endif
  1324. X    vsprintf(scratch, format, argptr);
  1325. X    xv_set(local_window.frame, 
  1326. X        FRAME_LEFT_FOOTER, scratch, 
  1327. X        NULL);
  1328. X    va_end(argptr);
  1329. }
  1330. X
  1331. #ifdef USE_PROTOTYPES
  1332. void right_footer_message(char *format, ...)
  1333. #else
  1334. /*VARARGS0*/
  1335. void right_footer_message(va_alist)
  1336. va_dcl
  1337. #endif
  1338. {
  1339. #ifndef USE_PROTOTYPES
  1340. X    char    *format;
  1341. #endif
  1342. X    va_list    argptr;
  1343. X    static char    scratch[MAXPATHLEN + 1];
  1344. X
  1345. #ifdef USE_PROTOTYPES
  1346. X    va_start(argptr, format);
  1347. #else
  1348. X    va_start(argptr);
  1349. X    format = (char *)va_arg(argptr, char *);
  1350. #endif
  1351. X    vsprintf(scratch, format, argptr);
  1352. X    xv_set(base_window.frame, 
  1353. X        FRAME_RIGHT_FOOTER, scratch, 
  1354. X        NULL);
  1355. X    va_end(argptr);
  1356. }
  1357. X
  1358. #ifdef USE_PROTOTYPES
  1359. void local_right_footer_message(char *format, ...)
  1360. #else
  1361. /*VARARGS0*/
  1362. void local_right_footer_message(va_alist)
  1363. va_dcl
  1364. #endif
  1365. {
  1366. #ifndef USE_PROTOTYPES
  1367. X    char    *format;
  1368. #endif
  1369. X    va_list    argptr;
  1370. X    static char    scratch[MAXPATHLEN + 1];
  1371. X
  1372. #ifdef USE_PROTOTYPES
  1373. X    va_start(argptr, format);
  1374. #else
  1375. X    va_start(argptr);
  1376. X    format = (char *)va_arg(argptr, char *);
  1377. #endif
  1378. X    vsprintf(scratch, format, argptr);
  1379. X    xv_set(local_window.frame, 
  1380. X        FRAME_RIGHT_FOOTER, scratch, 
  1381. X        NULL);
  1382. X    va_end(argptr);
  1383. }
  1384. X
  1385. #ifdef USE_PROTOTYPES
  1386. void schedule_footer_message(char *format, ...)
  1387. #else
  1388. /*VARARGS0*/
  1389. void schedule_footer_message(va_alist)
  1390. va_dcl
  1391. #endif
  1392. {
  1393. #ifndef USE_PROTOTYPES
  1394. X    char    *format;
  1395. #endif
  1396. X    va_list    argptr;
  1397. X    static char    scratch[MAXPATHLEN + 1];
  1398. X
  1399. #ifdef USE_PROTOTYPES
  1400. X    va_start(argptr, format);
  1401. #else
  1402. X    va_start(argptr);
  1403. X    format = (char *)va_arg(argptr, char *);
  1404. #endif
  1405. X    vsprintf(scratch, format, argptr);
  1406. X    xv_set(schedule_window.frame, 
  1407. X        FRAME_LEFT_FOOTER, scratch, 
  1408. X        NULL);
  1409. X    va_end(argptr);
  1410. }
  1411. X
  1412. #ifdef USE_PROTOTYPES
  1413. void status_footer_message(char *format, ...)
  1414. #else
  1415. /*VARARGS0*/
  1416. void status_footer_message(va_alist)
  1417. va_dcl
  1418. #endif
  1419. {
  1420. #ifndef USE_PROTOTYPES
  1421. X    char    *format;
  1422. #endif
  1423. X    va_list    argptr;
  1424. X    static char    scratch[MAXPATHLEN + 1];
  1425. X
  1426. #ifdef USE_PROTOTYPES
  1427. X    va_start(argptr, format);
  1428. #else
  1429. X    va_start(argptr);
  1430. X    format = (char *)va_arg(argptr, char *);
  1431. #endif
  1432. X    vsprintf(scratch, format, argptr);
  1433. X    xv_set(status_window.frame, 
  1434. X        FRAME_LEFT_FOOTER, scratch, 
  1435. X        NULL);
  1436. X    va_end(argptr);
  1437. }
  1438. X
  1439. #ifdef USE_PROTOTYPES
  1440. void timeout_disconnect(void)
  1441. #else
  1442. void timeout_disconnect()
  1443. #endif
  1444. {
  1445. X    footer_message("Disconnected (timeout).", (char *)NULL);
  1446. X    disconnect();
  1447. }
  1448. X
  1449. #ifdef USE_PROTOTYPES
  1450. void close_files(void)
  1451. #else
  1452. void close_files()
  1453. #endif
  1454. {
  1455. X    if (commandfp) 
  1456. X        (void) fclose(commandfp);
  1457. X    commandfp = NULL;
  1458. X    if (responsefp) 
  1459. X        (void) fclose(responsefp);
  1460. X    responsefp = NULL;
  1461. }
  1462. X
  1463. #ifdef USE_PROTOTYPES
  1464. void quit_ftp(void)
  1465. #else
  1466. void quit_ftp()
  1467. #endif
  1468. {
  1469. X    connected=0;
  1470. X
  1471. X    if (!timedout && commandfp)
  1472. X        (void) command("QUIT");
  1473. X    close_files();
  1474. X    data = -1;
  1475. X
  1476. X    /* remove /usr/tmp files */
  1477. X    system("rm -rf /usr/tmp/sched* /usr/tmp/ftptl*");
  1478. }
  1479. X
  1480. #ifdef USE_PROTOTYPES
  1481. void disconnect(void)
  1482. #else
  1483. void disconnect()
  1484. #endif
  1485. {
  1486. X    if (timedout > 1)
  1487. X        fprintf(stderr, "multiple timeouts?\n");
  1488. X
  1489. X    quit_ftp();
  1490. X
  1491. X    xv_set(schedule_window.process,
  1492. X        PANEL_INACTIVE, FALSE,
  1493. X        NULL);
  1494. X
  1495. X    xv_set(frame_icon, 
  1496. X        ICON_LABEL, "", 
  1497. X        NULL);
  1498. X    xv_set(base_window.frame, 
  1499. X        XV_LABEL, header_name, 
  1500. X        NULL);
  1501. X
  1502. X    non_unix = 0;
  1503. X
  1504. X    xv_set(tool_property_window.directory_lists.remote_sort,  
  1505. X        PANEL_INACTIVE, FALSE, 
  1506. X        NULL); 
  1507. X
  1508. X
  1509. X    /* inactivate buttons */
  1510. X    end_busy_cycle();
  1511. X    cursor_normal();
  1512. X    idle_timer_off();
  1513. X
  1514. X    remote_list_nfiles = 0;
  1515. X    remote_list_ndirs = 0;
  1516. X    remote_list_nothers = 0;
  1517. X
  1518. X    /*
  1519. X    free_batchlist(receive_window.list, 0);
  1520. X     */
  1521. X    nreceiveitems = 0;
  1522. X
  1523. X    change_remote_list_menu();
  1524. X
  1525. X    clear_slist(base_window.list);
  1526. X    free_dircache(&remote_dircache);
  1527. X    right_footer_message("", (char *)NULL);
  1528. X
  1529. X    /* inactivate buttons */
  1530. X    xv_set(host_window.basic.connect, 
  1531. X        PANEL_INACTIVE, FALSE, 
  1532. X        PANEL_LABEL_STRING, " Connect  ",
  1533. X        XV_HELP_DATA, "ftptool:ConnectButton",
  1534. X        NULL);
  1535. X
  1536. X    xv_set(base_window.connect, 
  1537. X        PANEL_INACTIVE, FALSE, 
  1538. X        PANEL_LABEL_STRING, " Connect... ",
  1539. X        XV_HELP_DATA, "ftptool:ConnectButton",
  1540. X        NULL);
  1541. X
  1542. X    xv_set(base_window.directory,
  1543. X        PANEL_INACTIVE, TRUE,
  1544. X        PANEL_VALUE, "",
  1545. X        NULL);
  1546. X
  1547. X    xv_set(base_window.file, 
  1548. X        PANEL_INACTIVE, FALSE, 
  1549. X        NULL);
  1550. X    xv_set(base_window.view, 
  1551. X        PANEL_INACTIVE, FALSE, 
  1552. X        NULL);
  1553. X    xv_set(local_window.directory, 
  1554. X        PANEL_READ_ONLY, FALSE, 
  1555. X        NULL);
  1556. X    xv_set(local_window.list, 
  1557. X        PANEL_INACTIVE, FALSE, 
  1558. X        NULL);
  1559. X
  1560. X    xv_set(tool_property_window.apply, 
  1561. X        PANEL_INACTIVE, FALSE, 
  1562. X        NULL);
  1563. X
  1564. X    xv_set(base_window.abort, 
  1565. X        PANEL_INACTIVE, TRUE, 
  1566. X        NULL);
  1567. X
  1568. X
  1569. X    xv_set(base_window.list, 
  1570. X        XV_SHOW, TRUE, 
  1571. X        NULL);
  1572. }
  1573. X
  1574. #ifdef USE_PROTOTYPES
  1575. void xfer_buttons_inactive(void)
  1576. #else
  1577. void xfer_buttons_inactive()
  1578. #endif
  1579. {
  1580. X    footer_message("", (char *)NULL);
  1581. X    local_footer_message("", (char *)NULL);
  1582. X    idle_timer_off();
  1583. X    start_busy_cycle();
  1584. X    cursor_busy();
  1585. X    xv_set(base_window.file, 
  1586. X        PANEL_INACTIVE, TRUE, 
  1587. X        NULL);
  1588. X    xv_set(base_window.view, 
  1589. X        PANEL_INACTIVE, TRUE, 
  1590. X        NULL);
  1591. X    xv_set(host_window.basic.connect, 
  1592. X        PANEL_INACTIVE, TRUE, 
  1593. X        NULL);
  1594. X    xv_set(base_window.connect, 
  1595. X        PANEL_INACTIVE, TRUE, 
  1596. X        NULL);
  1597. X    xv_set(base_window.directory, 
  1598. X        PANEL_READ_ONLY, TRUE, 
  1599. X        NULL);
  1600. X    xv_set(base_window.list, 
  1601. X        PANEL_INACTIVE, TRUE, 
  1602. X        NULL);
  1603. X    xv_set(local_window.directory, 
  1604. X        PANEL_READ_ONLY, TRUE, 
  1605. X        NULL);
  1606. X    xv_set(local_window.list, 
  1607. X        PANEL_INACTIVE, TRUE, 
  1608. X        NULL);
  1609. X
  1610. X    xv_set(tool_property_window.apply, 
  1611. X        PANEL_INACTIVE, TRUE, 
  1612. X        NULL);
  1613. X    xv_set(tool_property_window.category, 
  1614. X        PANEL_INACTIVE, TRUE, 
  1615. X        NULL);
  1616. }
  1617. X
  1618. #ifdef USE_PROTOTYPES
  1619. void xfer_buttons_active(void)
  1620. #else
  1621. void xfer_buttons_active()
  1622. #endif
  1623. {
  1624. X    if (abort_transfer)
  1625. X        xv_set(base_window.frame,
  1626. X            FRAME_BUSY, FALSE,
  1627. X            NULL);
  1628. X    cursor_normal();
  1629. X    end_busy_cycle();
  1630. X    idle_timer_on();
  1631. X
  1632. X    xv_set(base_window.file, 
  1633. X        PANEL_INACTIVE, FALSE, 
  1634. X        NULL);
  1635. X    xv_set(base_window.view, 
  1636. X        PANEL_INACTIVE, FALSE, 
  1637. X        NULL);
  1638. X    xv_set(host_window.basic.connect, 
  1639. X        PANEL_INACTIVE, FALSE, 
  1640. X        NULL);
  1641. X    xv_set(base_window.connect, 
  1642. X        PANEL_INACTIVE, FALSE, 
  1643. X        NULL);
  1644. X    xv_set(base_window.directory, 
  1645. X        PANEL_READ_ONLY, FALSE, 
  1646. X        NULL);
  1647. X    xv_set(base_window.list, 
  1648. X        PANEL_INACTIVE, FALSE, 
  1649. X        NULL);
  1650. X    xv_set(local_window.directory, 
  1651. X        PANEL_READ_ONLY, FALSE, 
  1652. X        NULL);
  1653. X    xv_set(local_window.list, 
  1654. X        PANEL_INACTIVE, FALSE, 
  1655. X        NULL);
  1656. X
  1657. X    xv_set(tool_property_window.apply, 
  1658. X        PANEL_INACTIVE, FALSE, 
  1659. X        NULL);
  1660. X    xv_set(tool_property_window.category, 
  1661. X        PANEL_INACTIVE, FALSE, 
  1662. X        NULL);
  1663. X
  1664. X    xv_set(base_window.abort, 
  1665. X        PANEL_INACTIVE, TRUE, 
  1666. X        NULL);
  1667. }
  1668. X
  1669. #ifdef USE_PROTOTYPES
  1670. void cursor_busy(void)
  1671. #else
  1672. void cursor_busy()
  1673. #endif
  1674. {
  1675. X    Xv_Window    window;
  1676. X
  1677. X    window = xv_get(base_window.panel, CANVAS_NTH_PAINT_WINDOW, 0);
  1678. X    xv_set(window, 
  1679. X        WIN_CURSOR, busy_cursor, 
  1680. X        NULL);
  1681. X    window = xv_get(local_window.panel, CANVAS_NTH_PAINT_WINDOW, 0);
  1682. X    xv_set(window, 
  1683. X        WIN_CURSOR, busy_cursor, 
  1684. X        NULL);
  1685. X    window = xv_get(tool_property_window.panel, CANVAS_NTH_PAINT_WINDOW, 0);
  1686. X    xv_set(window, 
  1687. X        WIN_CURSOR, busy_cursor, 
  1688. X        NULL);
  1689. }
  1690. X
  1691. #ifdef USE_PROTOTYPES
  1692. void cursor_normal(void)
  1693. #else
  1694. void cursor_normal()
  1695. #endif
  1696. {
  1697. X    Xv_Window    window;
  1698. X
  1699. X    window = xv_get(base_window.panel, CANVAS_NTH_PAINT_WINDOW, 0);
  1700. X    xv_set(window, 
  1701. X        WIN_CURSOR, normal_cursor, 
  1702. X        NULL);
  1703. X    window = xv_get(local_window.panel, CANVAS_NTH_PAINT_WINDOW, 0);
  1704. X    xv_set(window, 
  1705. X        WIN_CURSOR, normal_cursor, 
  1706. X        NULL);
  1707. X    window = xv_get(tool_property_window.panel, CANVAS_NTH_PAINT_WINDOW, 0);
  1708. X    xv_set(window, 
  1709. X        WIN_CURSOR, normal_cursor, 
  1710. X        NULL);
  1711. }
  1712. X
  1713. #ifdef USE_PROTOTYPES
  1714. void show_stats(struct file_property_window *file_props,
  1715. X    struct dirlist *tmp)
  1716. #else
  1717. void show_stats(file_props,tmp)
  1718. struct file_property_window *file_props;
  1719. struct dirlist *tmp;
  1720. #endif
  1721. {
  1722. X    int        user_perms,group_perms,other_perms;
  1723. X    char    *type;
  1724. X
  1725. X    switch (tmp->mode & S_IFMT) {
  1726. X        case S_IFREG:
  1727. X            type = "Regular File";
  1728. X            break;
  1729. X        case S_IFDIR:
  1730. X            type = "Directory";
  1731. X            break;
  1732. X        case S_IFLNK:
  1733. X            type = "Symbolic Link";
  1734. X            break;
  1735. X        case S_IFCHR:
  1736. X            type = "Character Device";
  1737. X            break;
  1738. X        case S_IFBLK:
  1739. X            type = "Block Device";
  1740. X            break;
  1741. X        case S_IFSOCK:
  1742. X            type = "Socket";
  1743. X            break;
  1744. X        case S_IFIFO:
  1745. X            type = "Named Pipe";
  1746. X            break;
  1747. X        default:
  1748. X            type = "unknown";
  1749. X            break;
  1750. X    }
  1751. X
  1752. X    user_perms = 0;
  1753. X    if (tmp->mode & S_IRUSR) 
  1754. X        user_perms |= 1;
  1755. X    if (tmp->mode & S_IWUSR) 
  1756. X        user_perms |= 2;
  1757. X    if (tmp->mode & S_IXUSR) 
  1758. X        user_perms |= 4;
  1759. X
  1760. X    group_perms = 0;
  1761. X    if (tmp->mode & S_IRGRP) 
  1762. X        group_perms |= 1;
  1763. X    if (tmp->mode & S_IWGRP) 
  1764. X        group_perms |= 2;
  1765. X    if (tmp->mode & S_IXGRP) 
  1766. X        group_perms |= 4;
  1767. X
  1768. X    other_perms = 0;
  1769. X    if (tmp->mode & S_IROTH) 
  1770. X        other_perms |= 1;
  1771. X    if (tmp->mode & S_IWOTH) 
  1772. X        other_perms |= 2;
  1773. X    if (tmp->mode & S_IXOTH) 
  1774. X        other_perms |= 4;
  1775. X
  1776. X    /* show stats in window */
  1777. X    xv_set(file_props->filename, 
  1778. X        PANEL_VALUE, tmp->name,
  1779. X        PANEL_INACTIVE, FALSE,
  1780. X        NULL);
  1781. X    xv_set(file_props->owner, 
  1782. X        PANEL_LABEL_STRING, tmp->owner,
  1783. X        PANEL_INACTIVE, FALSE,
  1784. X        NULL);
  1785. X    xv_set(file_props->group, 
  1786. X        PANEL_LABEL_STRING, tmp->group,
  1787. X        PANEL_INACTIVE, FALSE,
  1788. X        NULL);
  1789. X    xv_set(file_props->modtime, 
  1790. X        PANEL_LABEL_STRING, tmp->date,
  1791. X        PANEL_INACTIVE, FALSE,
  1792. X        NULL);
  1793. X    xv_set(file_props->type, 
  1794. X        PANEL_LABEL_STRING, type,
  1795. X        PANEL_INACTIVE, FALSE,
  1796. X        NULL);
  1797. X    sprintf(scratch, "%d", tmp->size);
  1798. X    xv_set(file_props->size, 
  1799. X        PANEL_LABEL_STRING, scratch,
  1800. X        PANEL_INACTIVE, FALSE,
  1801. X        NULL);
  1802. X    xv_set(file_props->user_perms, 
  1803. X        PANEL_VALUE, user_perms,
  1804. X        PANEL_INACTIVE, FALSE,
  1805. X        NULL);
  1806. X    xv_set(file_props->group_perms, 
  1807. X        PANEL_VALUE, group_perms,
  1808. X        PANEL_INACTIVE, FALSE,
  1809. X        NULL);
  1810. X    xv_set(file_props->other_perms, 
  1811. X        PANEL_VALUE, other_perms,
  1812. X        PANEL_INACTIVE, FALSE,
  1813. X        NULL);
  1814. }
  1815. X
  1816. #ifdef USE_PROTOTYPES
  1817. void inactivate_props(struct file_property_window *file_props)
  1818. #else
  1819. void inactivate_props(file_props)
  1820. struct file_property_window *file_props;
  1821. #endif
  1822. {
  1823. X    xv_set(file_props->filename, 
  1824. X        PANEL_INACTIVE, TRUE,
  1825. X        NULL);
  1826. X    xv_set(file_props->owner, 
  1827. X        PANEL_INACTIVE, TRUE,
  1828. X        NULL);
  1829. X    xv_set(file_props->group, 
  1830. X        PANEL_INACTIVE, TRUE,
  1831. X        NULL);
  1832. X    xv_set(file_props->modtime, 
  1833. X        PANEL_INACTIVE, TRUE,
  1834. X        NULL);
  1835. X    xv_set(file_props->type, 
  1836. X        PANEL_INACTIVE, TRUE,
  1837. X        NULL);
  1838. X    xv_set(file_props->size, 
  1839. X        PANEL_INACTIVE, TRUE,
  1840. X        NULL);
  1841. X    xv_set(file_props->user_perms, 
  1842. X        PANEL_INACTIVE, TRUE,
  1843. X        NULL);
  1844. X    xv_set(file_props->group_perms, 
  1845. X        PANEL_INACTIVE, TRUE,
  1846. X        NULL);
  1847. X    xv_set(file_props->other_perms, 
  1848. X        PANEL_INACTIVE, TRUE,
  1849. X        NULL);
  1850. }
  1851. X
  1852. #ifdef USE_PROTOTYPES
  1853. int ask_make_dir(char *s)
  1854. #else
  1855. int ask_make_dir(s)
  1856. char    *s;
  1857. #endif
  1858. {
  1859. X    int        answer;
  1860. #ifdef XVIEW3
  1861. X    Xv_notice notice;
  1862. #endif
  1863. X
  1864. X    sprintf(scratch, "%s does not exist.", s);
  1865. #ifdef XVIEW3
  1866. X    notice = xv_create(local_window.panel, NOTICE,
  1867. X        NOTICE_MESSAGE_STRINGS,
  1868. X            scratch,
  1869. X            "You can:",
  1870. X            NULL,
  1871. X        NOTICE_BUTTON,         "Cancel", 4,
  1872. X        NOTICE_BUTTON,      "Try to create it", 3,
  1873. X        NOTICE_STATUS, &answer,
  1874. X        XV_SHOW, TRUE,
  1875. X        NULL);
  1876. X    xv_destroy_safe(notice);
  1877. #else
  1878. X    answer = notice_prompt(local_window.panel, NULL,
  1879. X        NOTICE_MESSAGE_STRINGS,
  1880. X            scratch,
  1881. X            "You can:",
  1882. X            NULL,
  1883. X        NOTICE_BUTTON,         "Cancel", 4,
  1884. X        NOTICE_BUTTON,      "Try to create it", 3,
  1885. X        NULL);
  1886. #endif
  1887. X    if (answer == 4) 
  1888. X        return -1;
  1889. X
  1890. X    return make_dirs(s, 1);
  1891. }
  1892. X
  1893. #ifdef USE_PROTOTYPES
  1894. SHAR_EOF
  1895. true || echo 'restore of misc.c failed'
  1896. fi
  1897. echo 'End of  part 7'
  1898. echo 'File misc.c is continued in part 8'
  1899. echo 8 > _shar_seq_.tmp
  1900. exit 0
  1901. -- 
  1902. Senior Systems Scientist        mail: dcmartin@msi.com
  1903. Molecular Simulations, Inc.        uucp: uunet!dcmartin
  1904. 796 North Pastoria Avenue        at&t: 408/522-9236
  1905. Sunnyvale, California 94086        fax: 408/732-0831
  1906.