home *** CD-ROM | disk | FTP | other *** search
- /*--------------------------------------------------------------------------*/
- /* */
- /* */
- /* ------------ Bit-Bucket Software, Co. */
- /* \ 10001101 / Writers and Distributors of */
- /* \ 011110 / Freely Available<tm> Software. */
- /* \ 1011 / */
- /* ------ */
- /* */
- /* (C) Copyright 1987-91, Bit Bucket Software Co., a Delaware Corporation. */
- /* */
- /* */
- /* This module was written by Vince Perriello */
- /* */
- /* */
- /* BinkleyTerm Phone list Search Module */
- /* */
- /* */
- /* For complete details of the licensing restrictions, please refer */
- /* to the License agreement, which is published in its entirety in */
- /* the MAKEFILE and BT.C, and also contained in the file LICENSE.250. */
- /* */
- /* USE OF THIS FILE IS SUBJECT TO THE RESTRICTIONS CONTAINED IN THE */
- /* BINKLEYTERM LICENSING AGREEMENT. IF YOU DO NOT FIND THE TEXT OF */
- /* THIS AGREEMENT IN ANY OF THE AFOREMENTIONED FILES, OR IF YOU DO */
- /* NOT HAVE THESE FILES, YOU SHOULD IMMEDIATELY CONTACT BIT BUCKET */
- /* SOFTWARE CO. AT ONE OF THE ADDRESSES LISTED BELOW. IN NO EVENT */
- /* SHOULD YOU PROCEED TO USE THIS FILE WITHOUT HAVING ACCEPTED THE */
- /* TERMS OF THE BINKLEYTERM LICENSING AGREEMENT, OR SUCH OTHER */
- /* AGREEMENT AS YOU ARE ABLE TO REACH WITH BIT BUCKET SOFTWARE, CO. */
- /* */
- /* */
- /* You can contact Bit Bucket Software Co. at any one of the following */
- /* addresses: */
- /* */
- /* Bit Bucket Software Co. FidoNet 1:104/501, 1:343/491 */
- /* P.O. Box 460398 AlterNet 7:491/0 */
- /* Aurora, CO 80046 BBS-Net 86:2030/1 */
- /* Internet f491.n343.z1.fidonet.org */
- /* */
- /* Please feel free to contact us at any time to share your comments about */
- /* our software and/or licensing policies. */
- /* */
- /*--------------------------------------------------------------------------*/
-
- /* Include this file before any other includes or defines! */
-
- #include "includes.h"
-
- int SaveScanList (int);
- void wait_for_keypress(void);
-
- int list_search ()
- {
- int saved_baud;
- long t1;
- int i, k, l;
- int dirty;
- ADDR ls_addr;
- unsigned int kbd_input;
-
- static unsigned int save_chars[] = {
- SHF1, SHF2, SHF3, SHF4, SHF5,
- SHF6, SHF7, SHF8, SHF9, SHF10
- };
-
- static unsigned int load_chars[] = {
- ALTF1, ALTF2, ALTF3, ALTF4, ALTF5,
- ALTF6, ALTF7, ALTF8, ALTF9, ALTF10
- };
-
- static unsigned int command_chars[] = {
- PF1, PF2, PF3, PF4, PF5,
- PF6, PF7, PF8, PF9, PF10
- };
-
- /*
- * * Input the phone numbers we want to scan *
- *
- */
-
- dirty = 1;
-
- /*
- * Print out a null string nicely for OS/2
- */
-
- #define NICE_TEXT(n) (((n) == NULL) ? "(none)" : n)
-
- for (;;)
- {
- if (dirty)
- {
- screen_clear ();
- (void) printf (MSG_TXT(M_PHONE_HELP));
- (void) printf (MSG_TXT(M_PHONE_HELP2));
- if (set_loaded)
- (void) printf (MSG_TXT(M_LAST_SET),set_loaded);
- (void) printf (MSG_TXT(M_CURRENT_PHONES));
- for (k = 0; k < 10; k += 2)
- {
- (void) printf ("%2d: %35s %2d: %35s\n",
- k + 1,
- NICE_TEXT (scan_list[k]),
- k + 2,
- NICE_TEXT (scan_list[k + 1]));
- }
- (void) printf (MSG_TXT(M_INPUT_COMMAND));
- dirty = 0;
- }
-
- while (!KEYPRESS ())
- time_release ();
- kbd_input = FOSSIL_CHAR ();
-
- if (((kbd_input & 0xff) == '\n') || ((kbd_input & 0xff) == '\r'))
- break;
-
- if ((kbd_input & 0xff) == ESC)
- return (0);
-
- for (k = 0; k < 10; k++)
- {
- if (kbd_input == save_chars[k]) /* Save into a set? */
- {
- (void) SaveScanList(k); /* Yes, do it */
- dirty = 1; /* Force redisplay */
- k = 10; /* Then fool the logic*/
- break;
- }
-
- if (kbd_input == load_chars[k]) /* Load from a set? */
- {
- (void) LoadScanList(k,1); /* Yes, do it */
- dirty = 1; /* Force redisplay */
- k = 10; /* Then fool the logic*/
- break;
- }
-
- if (kbd_input == command_chars[k]) /* Plain old Fkey? */
- break; /* Yup, get out now */
- }
-
- if (k == 10) /* Not a function key */
- {
- k = (kbd_input & 0xff) - '0'; /* Convert from digit */
- if ((k < 0) || (k > 9)) /* Was it a digit? */
- continue; /* No, throw char out */
- if (!k) /* Is it a zero? */
- k = 9; /* That's 9 to us */
- else --k; /* Else make zero-rel */
- }
-
- (void) printf (MSG_TXT(M_ELEMENT_CHOSEN), k + 1);
- if (scan_list[k] != NULL)
- {
- (void) printf (MSG_TXT(M_CURRENTLY_CONTAINS), scan_list[k]);
- (void) printf (MSG_TXT(M_PHONE_HELP3));
- }
- else
- {
- (void) printf (MSG_TXT(M_PHONE_HELP4));
- }
- (void) gets (junk); /* Get the user's input */
- ++dirty; /* Always redisplay */
- if ((l = (int) strlen (junk)) == 0) /* If nothing there, */
- continue; /* move along */
-
- if (l == 1 && *junk == ' ') /* If just a space... */
- {
- if (scan_list[k] != NULL) /* Delete old number */
- free(scan_list[k]);
- scan_list[k] = NULL; /* Clean up the ref */
- continue; /* End this iteration */
- }
-
- if (scan_list[k] != NULL) { /* Get rid of old num */
- free(scan_list[k]);
- }
- if ((scan_list[k] = calloc( 1, (unsigned int) (++l))) == NULL) /* Allocate space */
- {
- (void) printf (MSG_TXT(M_MEM_ERROR));
- return (0); /* Get out for error */
- }
- (void) strcpy (scan_list[k], junk); /* Save new number */
- }
-
- /*
- * * Actual Search logic *
- *
- */
- status_line (MSG_TXT(M_STARTING_SCAN));
- for (;;)
- {
- l = 0;
- for (k = 0; k < 10; k++)
- {
- if (scan_list[k] == NULL)
- continue;
- (void) strcpy (junk, scan_list[k]);
- if (!isdigit (junk[0]) && junk[0] != '\"')
- {
- (*userfunc) (junk, &ls_addr);
- if ((ls_addr.Net != 0xffff) && (ls_addr.Node != 0xffff) && (ls_addr.Zone != 0xffff))
- {
- (void) sprintf (junk, "%s", Full_Addr_Str (&ls_addr));
- }
- else continue;
- }
- if (strchr (junk, '/') != NULL)
- {
- if (!nodeproc (junk))
- break;
- (void) strcpy (junk, (char *) (newnodedes.PhoneNumber));
- }
- saved_baud = baud;
- if (try_1_connect (junk)) /* Attempt to connect */
- {
- status_line (MSG_TXT(M_CONNECTED_TO_ITEM), k + 1);
- free(scan_list[k]);
- scan_list[k] = NULL;
- gong ();
- return (1);
- }
- ++l;
- baud = saved_baud;
- program_baud ();
- cur_baud = btypes[baud];
- t1 = timerset (200);
- while (!timeup (t1)) /* pause for 2 seconds */
- {
- if (KEYPRESS ())
- {
- i = FOSSIL_CHAR () & 0xff;
- if (i == ESC) /* Abort for ESCape */
- {
- status_line (MSG_TXT(M_CONNECT_ABORTED));
- return (0);
- }
- }
- time_release ();
- }
- }
- if (!l)
- break;
- }
-
- return (0);
- }
-
- int LoadScanList (int number,int report_errors)
- {
- int k, l;
- FILE *ScanFile;
-
- (void) sprintf(junk,"%sBinkScan.LS%c",BINKpath, number + '0');
- if ((ScanFile = fopen(junk, "rb")) == NULL)
- {
- if (report_errors)
- {
- (void) printf(MSG_TXT(M_UNABLE_TO_OPEN), junk);
- (void) printf ("\n");
- wait_for_keypress();
- }
- return(0);
- }
- for (k = 0; k < 10; k++)
- {
- if (fread(junk, 36, 1, ScanFile) != 1)
- {
- if (report_errors)
- {
- (void) printf(MSG_TXT(M_SET_READ_ERROR), number + 1);
- wait_for_keypress();
- }
- (void) fclose(ScanFile);
- return(0);
- }
-
- if (scan_list[k] != NULL)
- {
- free(scan_list[k]);
- scan_list[k] = NULL;
- }
-
- l = (int) strlen (junk);
- if (l)
- {
- if ((scan_list[k] = calloc( 1, (unsigned int) (++l))) == NULL) /* Allocate space */
- {
- if (report_errors)
- {
- (void) printf(MSG_TXT(M_MEM_ERROR));
- wait_for_keypress();
- }
- (void) fclose(ScanFile);
- return(0);
- }
-
- (void) strcpy (scan_list[k], junk); /* Save new number */
- }
- }
- l = fclose (ScanFile);
- if (report_errors)
- {
- if (l)
- (void) printf(MSG_TXT(M_SET_CLOSE_ERR), number + 1);
- else
- {
- (void) printf(MSG_TXT(M_SET_LOADED), number + 1);
- set_loaded = number + 1;
- }
- wait_for_keypress();
- }
- return(l);
- }
-
- int SaveScanList(int number)
- {
- int k, l;
- FILE *ScanFile;
-
- (void) sprintf(junk,"%sBinkScan.LS%c",BINKpath, number + '0');
- if ((ScanFile = fopen(junk, "wb")) == NULL)
- {
- (void) printf(MSG_TXT(M_UNABLE_TO_OPEN),junk);
- (void) printf ("\n");
- wait_for_keypress();
- return(0);
- }
- for (k = 0; k < 10; k++)
- {
- for (l = 0; l < 36; l++)
- junk[l] = '\0';
-
- if (scan_list[k] != NULL)
- (void) strcpy(junk,scan_list[k]);
-
- if (fwrite(junk, 36, 1, ScanFile) != 1)
- {
- (void) printf(MSG_TXT(M_SET_WRITE_ERROR), number + 1);
- wait_for_keypress();
- (void) fclose(ScanFile);
- return(0);
- }
- }
-
- l = fclose (ScanFile);
- if (l)
- (void) printf(MSG_TXT(M_SET_CLOSE_ERR), number + 1);
- else
- {
- (void) printf(MSG_TXT(M_SET_SAVED), number + 1);
- set_loaded = number + 1;
- }
- wait_for_keypress();
- return(l);
- }
-
- void wait_for_keypress(void)
- {
- (void) printf("%s\n", MSG_TXT(M_PRESS_ENTER));
- while (!KEYPRESS ())
- time_release ();
- (void) FOSSIL_CHAR ();
- }
-