User Controls

Virtual Fax Machine Software

  1. totse2118 Space Nigga [my ci light-haired pongee]
    I'm using a lot more than efax

    20 com ports



    the scrollbar on the top left lol
  2. aldra JIDF Controlled Opposition
    fags maggine
  3. totse2118 Space Nigga [my ci light-haired pongee]
    To use Caselli’s machine, the fax sender wrote a message or drew an image on a sheet of tin in non-conductive ink. The sheet was then placed on a plate where a transmitting stylus, in a circuit with it, scanned across it in a series of parallel passes. On the receiving end, another stylus, connected by telegraph lines, moved in synchronicity across a chemically-treated piece of paper.

    As it scanned, the transmitter would conduct an electrical signal when the stylus ran over the blank parts of the tin sheet and cut the current when the stylus hit the ink. The spatial pattern of the original message, translated into the starts and stops of the current, went over the wire to the synced receiver, and the chemical paper changed color where the current went through. The result: a perfect copy of the original.

    https://hackaday.com/2016/02/17/faxing-in-1843/
  4. Originally posted by totse2118 https://hackaday.com/2016/02/17/faxing-in-1843/

    That's a photocopier.
  5. totse2118 Space Nigga [my ci light-haired pongee]
    photocopiers cant interact with the mojo wire
  6. totse2118 Space Nigga [my ci light-haired pongee]


    i found a company that sells phone numbers and doesn't force you to buy 100 of them in a bundle

    https://www.numberbarn.com/number-parking



    idk if this will work if its not assigned to a line but you can port the numbers , fuck this shit how do I make my own numbers
  7. totse2118 Space Nigga [my ci light-haired pongee]
    SourceForge logo

    [r2715]: / trunk / sendfax / sendfax.c++ Maximize History
    /* $Id: sendfax.c++ 1176 2013-07-24 05:20:02Z faxguy $ */
    /*
    * Copyright (c) 1990-1996 Sam Leffler
    * Copyright (c) 1991-1996 Silicon Graphics, Inc.
    * HylaFAX is a trademark of Silicon Graphics
    *
    * Permission to use, copy, modify, distribute, and sell this software and
    * its documentation for any purpose is hereby granted without fee, provided
    * that (i) the above copyright notices and this permission notice appear in
    * all copies of the software and related documentation, and (ii) the names of
    * Sam Leffler and Silicon Graphics may not be used in any advertising or
    * publicity relating to the software without the specific, prior written
    * permission of Sam Leffler and Silicon Graphics.
    *
    * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
    * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
    * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
    *
    * IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
    * ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
    * OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
    * WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
    * LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
    * OF THIS SOFTWARE.
    */
    #include "config.h" //for BR_14400 definition
    #include "class2.h" //for BR_14400 definition
    #include "SendFaxClient.h"
    #include "FaxDB.h"
    #include "Sys.h"
    #include "config.h"
    #include <ctype.h> // isspace()

    #if HAS_LOCALE
    extern "C" {
    #include <locale.h>
    }
    #endif

    class sendFaxApp : public SendFaxClient {
    private:
    fxStr appName; // for error messages
    fxStr stdinTemp; // temp file for collecting from pipe
    FaxDB* db;

    static fxStr dbName;

    void addDestination(const char* cp);
    void addDestinationsFromFile(const char* filename);
    void copyToTemporary(int fin, fxStr& tmpl);
    void fatal(const char* fmt ...);
    void usage();
    public:
    sendFaxApp();
    ~sendFaxApp();

    int run(int argc, char** argv);
    };

    fxStr sendFaxApp::dbName("~/.faxdb");

    sendFaxApp::sendFaxApp()
    {
    db = NULL;
    }

    sendFaxApp::~sendFaxApp()
    {
    if (stdinTemp != "") Sys::unlink(stdinTemp);
    delete db;
    }

    int
    sendFaxApp::run(int argc, char** argv)
    {
    extern int optind;
    extern char* optarg;
    int c;
    char *owner = NULL;
    char *pass = NULL;
    bool optionsUsed = true;

    appName = argv[0];
    u_int l = appName.length();
    appName = appName.tokenR(l, '/');

    resetConfig();
    readConfig(FAX_SYSCONF);
    readConfig(FAX_LIBDATA "/sendfax.conf");
    readConfig(FAX_USERCONF);

    bool waitForJob = false;
    int verbose = 0;
    SendFaxJob& proto = getProtoJob();
    db = new FaxDB(tildeExpand(dbName));
    while ((c = Sys::getopt(argc, argv, "a:b:B:c:C:d:e:f:F:h:i:I:k:M:o:O:P:r:s:S:t:T:u:U:V:W:x:X:y:Y:z:123lmnpvwADEGNR")) != -1) {
    if (c != 'h')
    optionsUsed = false;
    switch (c) {
    case '1': // restrict to 1D-encoded data
    proto.setDesiredDF(0);
    break;
    case '2': // restrict to 2D-encoded data
    proto.setDesiredDF(1);
    break;
    case '3': // restrict to MMR-encoded data
    proto.setDesiredDF(3);
    break;
    case 'a': // time at which to transmit job
    proto.setSendTime(optarg);
    break;
    case 'A': // archive job
    proto.setDoneOp("archive");
    break;
    case 'b': // minimum transfer speed
    proto.setMinSpeed(optarg);
    break;
    case 'B': // desired transmit speed
    proto.setDesiredSpeed(optarg);
    break;
    case 'C': // cover page: template file
    proto.setCoverTemplate(optarg);
    break;
    case 'c': // cover page: comment field
    proto.setCoverComments(optarg);
    break;
    case 'D': // notify when done
    proto.setNotification("when done");
    break;
    case 'd': // destination name and number
    optionsUsed = true;
    addDestination(optarg);
    break;
    case 'e': // sender's Caller*ID Name
    proto.setFaxName(optarg);
    break;
    case 'E': // disable use of ECM
    proto.setDesiredEC(EC_DISABLE);
    break;
    case 'F': // override tag line format string
    proto.setTagLineFormat(optarg);
    break;
    case 'f': // sender's identity
    setFromIdentity(optarg);
    break;
    case 'G': // extended resolutions
    proto.setUseXVRes(true);
    break;
    case 'h': // server's host
    setHost(optarg);
    break;
    case 'I': // fixed retry time
    proto.setRetryTime(optarg);
    break;
    case 'i': // user-specified job identifier
    proto.setJobTag(optarg);
    break;
    case 'k': // time to kill job
    proto.setKillTime(optarg);
    break;
    case 'l': // low resolution
    proto.setVResolution(98.);
    break;
    case 'M': // desired min-scanline time
    proto.setDesiredMST(optarg);
    break;
    case 'm': // fine resolution
    proto.setVResolution(196.);
    break;
    case 'n': // no cover sheet
    proto.setAutoCoverPage(false);
    break;
    case 'N': // no notification
    proto.setNotification("none");
    break;
    case 'o': // specify owner:pass
    {
    char* pp = strchr(optarg, ':');
    if (pp && *(pp + 1) != '\0') {
    *pp = '\0';
    pass = pp + 1;
    }
    }
    owner = optarg;
    break;
    case 'O':
    {
    char* op = strchr(optarg, ':');
    if (op && *(op + 1) != '\0') {
    *op = '\0';
    if (strncmp(optarg, "skippedpages", 12) == 0) {
    proto.setSkippedPages(atoi(++op));
    } else if (strncmp(optarg, "skippages", 9) == 0) {
    proto.setSkipPages(atoi(++op));
    } else if (strncmp(optarg, "nocountcover", 12) == 0) {
    proto.setNoCountCover(atoi(++op));
    } else if (strncmp(optarg, "probeonly", 9) == 0) {
    proto.setProbeOnly(atoi(++op));
    } else if (strncmp(optarg, "serverdocover", 13) == 0) {
    proto.setServerDoCover(FaxConfig::getBoolean(++op));
    } else if (strncmp(optarg, "usecolor", 8) == 0) {
    if (strncmp(++op, "only", 4) == 0) {
    proto.setUseColor(true);
    proto.setDesiredDF(6);
    } else
    proto.setUseColor(FaxConfig::getBoolean(op));
    } else if (strncmp(optarg, "usesslfax", 9) == 0) {
    proto.setUseSSLFax(FaxConfig::getBoolean(++op));
    } else if (strncmp(optarg, "ignoremodembusy", 15) == 0) {
    proto.setIgnoreModemBusy(FaxConfig::getBoolean(++op));
    } else if (strncmp(optarg, "timezone", 8) == 0) {
    proto.setTimeZone(++op);
    } else if (strncmp(optarg, "config", 6) == 0) {
    readConfigItem(++op);
    }
    }
    }
    break;
    case 'p': // submit polling request
    addPollRequest();
    break;
    case 'P': // set scheduling priority
    proto.setPriority(optarg);
    break;
    case 'r': // cover sheet: regarding field
    proto.setCoverRegarding(optarg);
    break;
    case 'R': // notify when requeued or done
    proto.setNotification("when requeued");
    break;
    case 's': // set page size
    proto.setPageSize(optarg);
    break;
    case 'S': // set TSI
    proto.setTSI(optarg);
    break;
    case 't': // times to retry sending
    proto.setMaxRetries(atoi(optarg));
    break;
    case 'T': // times to dial telephone
    proto.setMaxDials(atoi(optarg));
    break;
    case 'u': // sender's Caller*ID Number (for tagline also)
    proto.setFaxNumber(optarg);
    break;
    case 'U': // cover page: sender's voice number
    proto.setCoverFromVoice(optarg);
    break;
    case 'v': // verbose mode
    verbose++;
    setvbuf(stdout, NULL, _IOLBF, BUFSIZ);
    SendFaxClient::setVerbose(true); // type rules & basic operation
    FaxClient::setVerbose(verbose > 1); // protocol tracing
    break;
    case 'V': // cover sheet: voice number field
    proto.setCoverVoiceNumber(optarg);
    break;
    case 'w': // wait for job to complete
    waitForJob = true;
    break;
    case 'W': // cover page: sender's fax number
    proto.setCoverFromFax(optarg);
    break;
    case 'x': // cover page: to's company
    proto.setCoverCompany(optarg);
    break;
    case 'X': // cover page: sender's company
    proto.setCoverFromCompany(optarg);
    break;
    case 'y': // cover page: to's location
    proto.setCoverLocation(optarg);
    break;
    case 'Y': // cover page: sender's location
    proto.setCoverFromLocation(optarg);
    break;
    case 'z': // destinations from file
    optionsUsed = true;
    addDestinationsFromFile(optarg);
    break;
    case '?':
    usage();
    /*NOTREACHED*/
    }
    }
    if (getNumberOfJobs() == 0) {
    fprintf(stderr, "%s: No destination specified.\n",
    (const char*) appName);
    usage();
    }
    if (!optionsUsed) {
    fprintf(stderr, "%s: Unused options after last destination.\n",
    (const char*) appName);
    usage();
    }
    if (optind < argc) {
    for (; optind < argc; optind++) {
    addFile(argv[optind]);
    }
    } else if (getNumberOfPollRequests() == 0) {
    copyToTemporary(fileno(stdin), stdinTemp);
    addFile(stdinTemp);
    }
    bool status = false;
    fxStr emsg;
    int retval = -1;
    if (callServer(emsg)) {
    status = login(owner, pass, emsg)
    && prepareForJobSubmissions(emsg)
    && submitJobs(emsg);
    if (status && waitForJob) {
    if (getNumberOfJobs() > 1) {
    printWarning("can only wait for one job (right now),"
    " waiting for job %s.", (const char*) getCurrentJob());
    }
    int waits = 0;
    time_t waitstart = Sys::now();
    fxStr rjobid = getCurrentJob();
    while (!jobWait(rjobid) && waits++ < 5) {
    /*
    * Our wait failed, and excepting a fault on the proxy this
    * can only mean that the connection was lost. Reconnect
    * and re-start our wait.
    */
    time_t sleeptime = waitstart + 60 - Sys::now();
    if (sleeptime < 1) sleeptime = 2;
    if (verbose) printWarning("lost connection to server, attempt %d. Attempting reconnection in %d seconds.", waits, sleeptime);
    hangupServer();
    sleep(sleeptime);
    waitstart = Sys::now();
    status = false;
    if (callServer(emsg)) {
    status = login(owner, pass, emsg) && setCurrentJob(rjobid);
    if (status && verbose) printWarning("reconnected to server. Resuming wait for job %s.", (const char*) rjobid);
    }
    }
    /* For the benefit of those watching in verbose... */
    fxStr r;
    command((const char*) fxStr::format("JOB %s", (const char*) rjobid));
    jobParm("conntime");
    jobParm("duration");
    jobParm("npages");
    jobParm("totpages");
    jobParm("commid");
    jobParm("ntries");
    jobParm("status");
    emsg = getLastResponse(); emsg.remove(0, emsg.length() > 4 ? 4 : emsg.length());
    if (emsg.length()) {
    status = false;
    jobParm("errorcode");
    r = getLastResponse(); r.remove(0, r.length() > 5 ? 5 : r.length());
    retval = atoi((const char*) r);
    } else {
    retval = 0;
    status = true;
    }
    jobParm("state");
    r = getLastResponse(); r.remove(0, r.length() > 4 ? 4 : r.length());
    // Due to the jobWait we should only ever see "DONE" and "FAILED"...
    if (r != "DONE") {
    status = false;
    }
    } else if (status) {
    retval = 0;
    }
    hangupServer();
    }
    if (!status) {
    printError("%s", (const char*) emsg);
    if (!retval) retval = -1;
    }
    return (retval);
    }

    void
    sendFaxApp::usage()
    {
    fxFatal("usage: %s [options] [files]\n"
    "(Read the manual page; it's too complicated)", (const char*) appName);
    }

    /*
    * Add a destination; parse ``person@number#subaddress'' syntax.
    * T.33 Appendix I suggests that ``#'' be used to tag a subaddress.
    */
    void
    sendFaxApp::addDestination(const char* cp)
    {
    fxStr recipient;
    const char* tp = strchr(cp, '@');
    if (tp) {
    recipient = fxStr(cp, tp-cp);
    cp = tp+1;
    } else {
    recipient = "";
    }
    fxStr subaddress;
    size_t sublen = 0;
    const char* ap = strchr(cp, '#');
    if (ap) {
    ap = ap+1;
    subaddress = fxStr(ap);
    sublen = strlen(subaddress) + 1;
    } else {
    subaddress = "";
    }
    fxStr dest(cp, strlen(cp) - sublen);
    if (db && dest.length() > 0) {
    fxStr name;
    FaxDBRecord* r = db->find(dest, &name);
    if (r) {
    if (recipient == "")
    recipient = name;
    dest = r->find(FaxDB::numberKey);
    }
    }
    if (dest.length() == 0) {
    fatal("Null destination for \"%s\"", cp);
    }
    SendFaxJob& job = addJob();
    job.setDialString(dest);
    job.setCoverName(recipient);
    job.setSubAddress(subaddress);
    if(job.getDesiredSpeed() > BR_14400 && job.getDesiredEC() == EC_DISABLE) {
    printWarning("ECM disabled, limiting job to 14400 bps.");
    job.setDesiredSpeed(BR_14400);
    }
    }

    /*
    * Add a destinations form file
    */
    void
    sendFaxApp::addDestinationsFromFile(const char* filename)
    {
    FILE* destfile;
    char dest[256];
    char *cp;

    if ((destfile = fopen(filename, "r")) != NULL) {
    while (fgets(dest, sizeof(dest), destfile)) {
    for (cp = strchr(dest, '\0'); cp>dest && isspace(cp[-1]); cp--);
    *cp='\0';
    if (dest[0] != '#' && dest[0] != '\0')
    addDestination(dest);
    }
    } else {
    fatal("%s: no such file", filename);
    }

    fclose(destfile);
    }

    /*
    * Copy data from fin to a temporary file.
    */
    void
    sendFaxApp::copyToTemporary(int fin, fxStr& tmpl)
    {
    const char* templ = _PATH_TMP "sndfaxXXXXXX";
    char* buff = strcpy(new char[strlen(templ) + 1], templ);
    int fd = Sys::mkstemp(buff);
    tmpl = buff;
    delete [] buff;
    if (fd < 0) {
    fatal("%s: Can not create temporary file", (const char*) tmpl);
    }
    int cc, total = 0;
    char buf[16*1024];
    while ((cc = Sys::read(fin, buf, sizeof (buf))) > 0) {
    if (Sys::write(fd, buf, cc) != cc) {
    Sys::unlink(tmpl);
    fatal("%s: write error", (const char*) tmpl);
    }
    total += cc;
    }
    Sys::close(fd);
    if (total == 0) {
    Sys::unlink(tmpl);
    tmpl = "";
    fatal("No input data; transmission aborted");
    }
    }

    #include <signal.h>

    static sendFaxApp* app = NULL;

    static void
    cleanup()
    {
    sendFaxApp* a = app;
    app = NULL;
    delete a;
    }

    static void
    sigDone(int n)
    {
    cleanup();
    exit(n);
    }

    int
    main(int argc, char** argv)
    {
    int r = 0;
    #ifdef LC_CTYPE
    setlocale(LC_CTYPE, ""); // for <ctype.h> calls
    #endif
    #ifdef LC_TIME
    setlocale(LC_TIME, ""); // for strftime calls
    #endif
    signal(SIGHUP, fxSIGHANDLER(sigDone));
    signal(SIGINT, fxSIGHANDLER(sigDone));
    signal(SIGTERM, fxSIGHANDLER(sigDone));
    signal(SIGCHLD, fxSIGHANDLER(SIG_DFL)); // by YC
    app = new sendFaxApp;
    r = app->run(argc, argv);
    if (r) sigDone(r);
    signal(SIGHUP, fxSIGHANDLER(SIG_IGN));
    signal(SIGINT, fxSIGHANDLER(SIG_IGN));
    signal(SIGTERM, fxSIGHANDLER(SIG_IGN));
    cleanup();
    return (r);
    }

    static void
    vfatal(FILE* fd, const char* fmt, va_list ap)
    {
    vfprintf(fd, fmt, ap);
    va_end(ap);
    fputs(".\n", fd);
    sigDone(-1);
    }

    void
    fxFatal(const char* va_alist ...)
    #define fmt va_alist
    {
    va_list ap;
    va_start(ap, fmt);
    vfatal(stderr, fmt, ap);
    /*NOTTEACHED*/
    }
    #undef fmt

    void
    sendFaxApp::fatal(const char* va_alist ...)
    #define fmt va_alist
    {
    fprintf(stderr, "%s: ", (const char*) appName);
    va_list ap;
    va_start(ap, fmt);
    vfatal(stderr, fmt, ap);
    /*NOTTEACHED*/
    }
    #undef fmt

    © 2023 Slashdo
  8. totse2118 Space Nigga [my ci light-haired pongee]
  9. Originally posted by totse2118

    I remember when the idiots at Charter Communication HQ decided to force cable customers to rent a digital box for $9.99/month even though their TV already had a built in cable converter. They ended up getting hit with a massive class action lawsuit, which they lost, and had to retroactively refund every charge to every customer going back years, which was billions. Then the same idiots forced customers to rent a modem at $3.99/month to get Internet service, and prevented customers from using their own modem, resulting in another mass class action lawsuit, which they lost and had to refund every single charge going back years, costing the fools several more billions.
  10. totse2118 Space Nigga [my ci light-haired pongee]
  11. I still use carrier pigeon. I have the fastest birds on the block.
  12. Buff Billy African Astronaut
    https://www.fusionpbx.com/

    Welcome to FusionPBX

    FusionPBX can be used as a highly available single or domain based multi-tenant PBX, carrier grade switch, call center server, fax server, voip server, voicemail server, conference server, voice application server, appliance framework and more. FreeSWITCH™ is a highly scalable, multi-threaded, multi-platform communication platform.

    It provides unlimited extensions, voicemail-to-email, music on hold, call parking, call center, call queues, phone provisioning and many other features. It provides the functionality your business needs and brings corporate level phone system features to small, medium and large businesses.
    Official Release

    FusionPBX version 5.2 has now been released with many improvements.

    Release Notes
    Tags
    Releases

    Release Highlights

    XML CDR service import CDR records from the file system.
    Additional Multi-lingual translations and improvements
    Provision - Additional templates
    Provision - Add Linphone
    Provision - Add Sipnetic
    Command line option for sending email reports
    Paging - Delayed paging
    Paging - Detected call transfer return to sender
    Fax - Failover with multiple Bridges
    Fax - Command Response
    Destination Summary Report
    Extensions - Optional Device Template column
    Extensions - per extension language select
    Extensions - Optional Device Address column
    Call Detail Records - call flow details
    Call Detail Records - call queue search
    Call Detail Records - optional account code column
    Call Detail Records - status improved
    IVR Menu Greeting play back button
    Intuitive Bridge Builder
    Email Queue optional smtp response logging
    Improved SESSION security
    And more...


    Optional Features

    dialplan_tools - Add dialplan actions to the destination select list.
    device_logs - Log provisioning requests so they can be used for troubleshooting.
    edit - Used to edit provisioning files, and FreeSWITCH XML file
    sip_trunks - Used for sip trunking for registered extensions.
    providers - Used with SMS and to define VoIP providers.
    messages - Used to send SMS messages.
    sql_query - Global admin cannn use this to run database queries.
  13. the man who put it in my hood Black Hole [miraculously counterclaim my golf]
    I have caved and ordered an analog phone line from my big telecom internet provider. Can your IP address get doxxed from sending spam faxes?
  14. https://en.wikipedia.org/wiki/X00
  15. the man who put it in my hood Black Hole [miraculously counterclaim my golf]
    VERSION 3.9 - DECEMBER 24 2012
    ------------------------------

    The goal for 3.9 was to strictly focus on fixing most if not all of the
    reported problems, not just recently, but collected over a period of time.

    In order for that to happen, some drastic changes were made to a few things.

    I hope you enjoy 3.9 as this one was a bit of a challenge and involved
    a fair amount of programming and testing.

    WARNING: BINKDWIN and BINKDOS2 must now be started with the -C parameter
    if you are serving incoming connections or "hubbing" mail to other
    systems, ie. C:\DB\BINKDWIN.EXE -C DBRIDGE.BNK

    Please update any shortcuts ASAP in Windows or OS/2 to include
    the -C parameter. Failure to do so may cause certain aspects of
    this release to not work as desired.

    BinkD must also be shut down before upgrading. If you have it
    running as a service in Windows 2000 or higher, ensure the service
    has been uninstalled entirely ("BINKDWIN -t uninstall") and
    verify; via Windows Start-Run-SERVICES.MSC. After upgrading to
    this version; D'Bridge will automatically re-install the service
    with the correct -C parameter.

    WARNING: The event database format has been updated, so after upgrading to
    3.9 you may find that all events become "overdue". Get ready to
    press CTL+A to cancel any overdue events when the mailer fires up.

    - A very serious problem involving a fun-filled week of troubleshooting
    issues with Quickdial, the MEH/UEH files and long-term system stability
    has been fixed.

    - A very serious fundimental design flaw with DBUTIL MOVE not moving more
    than one Netmail message at a time and/or not correctly modifying the
    "status" of moved Netmails has been fixed.

    - A very serious Echomail-tossing flaw has been fixed when tossing
    excessively large amounts of messages in Fido *.MSG format.

    - A serious stability problem has been resolved when scanning many
    Echomail areas with many *.MSG files; then pressing CTL+A either does
    not cancel the scan, or it hangs the system.

    - A somewhat major regression-bug with DB TERM not operating correctly or
    mishandling the modem or port itself has been fixed.

    - Rewrote the logic behind appending to a message archive in DBUTIL PURGE.

    - The TIC processor code has been completely rewritten and redesigned
    from scratch. It should no longer crash the system with memory leaks,
    stack overflow or other nonsense.

    - TIC "actions" now take place before TIC files are forwarded or processed
    to other systems.

    - Internet EMAIL and USENET gating has been significantly rewritten and
    redesigned from scratch; leaving only core elements and Areafix support
    for Usenet groups intact in the mailer while the rest is setup manually.

    - Every single reported "8000" problems with the Internal Editor should be
    gone for good. The internal editor should now correctly handles huge
    volumes of messages, messages with high-numbers, forwarding/copying, etc.

    - There may be a slight delay when using the internal editor and "listing"
    the contents of an Echomail directory in *.MSG format with many messages.
    This is normal.

    - When the mailer saves the last-EMSI session information, it no longer
    includes the system type (for possible security concerns)

    - Added two new questions, "Resolve from INA/IBN flags" and "Obey ICM"
    to the BinkD system; which was also significantly redesigned. D'Bridge
    can now resolve INA and IBN flags in addition to BINKD.TXT, when
    sending a Netmail message direct to another system and that system has
    not been first defined in the BINKD SESSION INFO screen.

    NOTE: At the last minute, it was determined that BinkD might complain
    about a destination system's "mailbox" directory missing if the
    destination was resolved by INA/IBN/BINKD.TXT and has only XMAIL or
    file-transmissions (no Netmail). The warning messages may persist for
    up to several minutes. These warnings can be ignored.

    - It is recommended that an INA/IBN/BINKD.TXT-resolved system be
    "properly" set up in the BINKD SESSIONS question if ongoing transactions
    are to be expected; or the system must also have a session password
    defined.

    - At least one system in BINKD SESSIONS must be defined for INA/IBN
    and BINKD.TXT resolution to work correctly (this will likely be
    addressed in a followup release)

    - BinkD can now process Private/Unpublished nodelist entries provided the
    destination system can have its listed BinkD information resolved
    correctly. I still do not understand why a Pvt/Unpublished system would
    have INA/IBN flags since Pvt/Unpublished to me implies you're off
    the Matrix; you can't be contacted other than host-routing messages.

    - The field for the BinkD default resolution domain (FNZ) has been adjusted,
    however I am not supporting FNZ lookups at this time.

    - There is no more option to "write" the BinkD configuration.

    - There are no more hooks to call DOS commands before or after a BinkD
    transaction, for a few reasons.

    - BinkD should now properly create all domain directories in scenarios
    where the Zone differs from the AKA matching logic D'Bridge applies.

    - BinkD will not create the received-mail semaphore until all mail and files
    have been received.

    - The problem of incorrect Zone portions of the BinkD domains created
    should be resolved now.

    - BinkD resolution is properly displayed in the "View Queue" menu screen.

    - The nodelist may be recompiled and the Queue rescanned after exiting the
    Config - Internet BinkD settings screen. This is normal behavior.

    - A very rare scenario where new Echomail is created, scanned & packed and
    then the first Queue entry being a PSTN dialup system is mistaken for
    a BinkD system thus the mail is lost in the Twilight Zone has been fixed.

    - Cosmetic bugs with displaying Queue entries in a few different rare
    scenarios have also been fixed.

    - The display of "** No description" on valid history entries has been
    corrected. Note that the format of those database files has been slightly
    adjusted and this means you will not be able to keep the history files
    if you downgrade back to 3.82.

    - If BinkD resolution fails, and/or a dialup modem is not installed for
    a Queue entry, the entry is placed on Hold/Unlisted status.

    - Clocksync operations are restricted to PSTN dialup modems only.

    - The timeout value for outgoing calls on PSTN dialup sessions has been
    slightly adjusted though the modem's S7 register setting still applies
    and overrides the timeout value.

    - D'Bridge no longer probes COM ports in COMM/MODEM setup.

    - A slightly less-complicated check for disk space is done while tossing
    mail and the available drive space falls within a certain threshold to
    cycle the tosser to pack XMAIL.

    - A slight correction was made to the code that controls the mailer's
    status line updates.

    - Removed all obnoxious "Beeps of Death" from the mailer and internal
    message editor; except for certain scenarios which the mailer must exit
    with an error. FUN FACT: It appears that anything that calls Beep on
    a Windows RDP session overrides the volume setting of the local host...

    - D'Bridge now properly creates all required directories for newcomers.

    - There are several "macros" that can be used for any "DOS window" or
    window-of-commands to execute. In theory, this can be used to run DOS
    programs which require a basic amount of "interaction" however I am
    not offering technical support beyond the abilities mentioned below.

    *K<CR> - Replace with carriage-return.
    *K<LF> - Replace with line-feed.
    *K<ESC> - Replace with ESC key.
    ~YYYY - Replace with current four-digit year.
    ~YY - Replace with current two-digit year.
    ~MM - Replace with current two-digit month.
    ~DD - Replace with current two-digit day.
    ~HH - Replace with current two-digit hour.
    ~II - Replace with current two-digit minute.
    ~ALARM - Beeps and halts the mailer until a key is pressed.

    Note for *K when I say replace, I mean stuffing the DOS keyboard buffer
    with the desired keystroke-code byte.

    - Checking for updates no longer crashes the system if CTL+A or CTL+X is
    pressed.

    - An extensive amount of Echomail/Echofile area changes no longer crashes
    the system.

    - Aborting a Zmodem file transfer in DB TERM no longer crashes the system.

    - Cancelling the Internet BinkD setting screen a bunch of times no longer
    crashes the system.

    - Specifying multiple destinations for Netmail via the F8 command in
    the internal editor no longer crashes the system.

    - D'Bridge now has slightly better support for GoldED and TimED message
    editors in Config - Editor Options.

    - The FLAGS kludge in the internal editor is no longer added to Netmail when
    the message contents are edited (yes, I'm aware of another issue relating
    to this scenario)

    - The internal editor should properly show kludges on the "first" message
    shown on the screen.

    - Removed the references to base address and IRQ settings. The FOSSIL code
    never uses it.

    - Should be possible now to push through a FREQ over BinkD via. the mailer,
    though I am not supporting it at this time.

    - Pretty sure I freed up some badly-needed memory in the MCF parsing code.

    - DB EXPORT and DB IMPORT have been slightly adjusted.

    - A serious problem with DB EXPORT and an immediate DB IMPORT not correctly
    "maintaining" certain settings should be resolved now.

    - D'Bridge 3.9 should run correctly on MS-DOS 3.3, "share" or no share.

    - D'Bridge should no longer crash on a Tandy 1000 SL, TL, RL or RLX
    computer system using Thaddius Pritchard's utility to play VOC/WAV files
    on the digital-audio chipsets of those computers when the "Youve got mail"
    option calls PLAYMAIL.BAT on personal Netmail/Echomail.

    - A very trivial problem with screen mode 43/50 has been fixed.

    - The on-line help system / entire documentation has been slightly updated
    and some sections revised or rewritten.

    - The "manual" is properly included going forward now...

    NOTE: At the last minute, I decided against including MS-Word and PDF
    documentation for now.

    - The Net 229 website correctly resolves http://www.net229.org/dbridge

    - The D'Bridge section of the Net 229 website has been updated.

    Feedback on 3.9 is greatly appreciated. Happy testing!

    Nick Andre
    www.net229.org
  16. the man who put it in my hood Black Hole [miraculously counterclaim my golf]
    That reminds me of a bit of obscure trivia...

    Back in the early days of FidoNet, one or more of the Fido BBS sysops had
    DEC Rainbows. The machines could run Fido just fine, but the serial port
    address/port didn't follow the convention laid down by the IBM PC. At the
    time, there were other MS-DOS compatibles that also had a similar issue
    with the serial port and some of those folks wanted to run Fido.

    Tom Jennings, Wynn Waggoner III(sp?) and Thom Henderson(sp?) got together
    to create the FOSSIL standard.

    FOSSIL is Fido Opus Seadog Serial Interface Layer and provided a mechanism
    via INT 14 for any MS-DOS compatible computer to run any BBS or mailer
    software that had FOSSIL support and a FOSSIL driver available for it.

    FOSSIL continued to be a thing long after the issue of serial port
    incompatibility was a thing of the past. In fact there's modern software
    out there now such as NetFossil that telnet-enables software that can talk
    to a FOSSIL driver.

    The two popular FOSSIL drivers that I recall from back in the day were
    BNU and Ray Gwinn's X00.

    As an aside, if anyone has or knows where I can find the source code for
    Opus BBS, I'd be interested in hearing from you!

    g.

    --
    Proud owner of F-15C 80-0007
    http://www.f15sim.com - The only one of its kind.
    http://www.diy-cockpits.org/coll - Go Collimated or Go Home.
    Some people collect things for a hobby. Geeks collect hobbies.

    ScarletDME - The red hot Data Management Environment
    A Multi-Value database for the masses, not the classes.
    http://scarlet.deltasoft.com - Get it _today_!
Jump to Top