Annotation of utils/whmdm.c, revision 1.1

1.1     ! root        1: /***************************************************************************
        !             2:  *   WHMDM.C   - Witchaven modem & serial module                           *
        !             3:  *                                                                         *
        !             4:  *                                                     - Les Bird 08/09/95 *
        !             5:  ***************************************************************************/
        !             6: 
        !             7: #include "stdio.h"
        !             8: #include "conio.h"
        !             9: #include "dos.h"
        !            10: #include "graph.h"
        !            11: #include "stdarg.h"
        !            12: #include "string.h"
        !            13: #include "serial.h"
        !            14: #include <memcheck.h>
        !            15: 
        !            16: #define   SCNSLINKED
        !            17: 
        !            18: #define   CLKIPS    18
        !            19: 
        !            20: #define   SCRSIZE   4000
        !            21: 
        !            22: #define   NUMSETOPTS          6
        !            23: 
        !            24: #ifdef SCNSLINKED
        !            25: extern
        !            26: char scntbl[][SCRSIZE];
        !            27: #endif
        !            28: 
        !            29: enum {
        !            30:      SETSER,
        !            31:      SETCOM,
        !            32:      SETBPS,
        !            33:      SETINITS,
        !            34:      SETDIALO,
        !            35:      SETANSS,
        !            36:      SETDIALS,
        !            37:      SETDIALN,
        !            38:      DIALMDM
        !            39: };
        !            40: 
        !            41: char *setopts[]={
        !            42:      "COM PORT:",
        !            43:      "BAUD RATE:",
        !            44:      "INIT STRING:",
        !            45:      "ANSWER STRING:",
        !            46:      "DIAL COMMAND:",
        !            47:      "PHONE NUMBER:"
        !            48: };
        !            49: 
        !            50: #define   ANSSLEN   48
        !            51: #define   DIALSLEN  48
        !            52: #define   DIALNLEN  48
        !            53: #define   INITSLEN  48
        !            54: 
        !            55: char answerstring[ANSSLEN],
        !            56:      dialstring[DIALSLEN],
        !            57:      initstring[INITSLEN],
        !            58:      mdmresp[1024],
        !            59:      dialnumber[DIALNLEN],
        !            60:      sbuf[SCRSIZE],
        !            61:      *vmem;
        !            62: 
        !            63: short connected,
        !            64:      oldvmode,
        !            65:      quitprog;
        !            66: 
        !            67: long bps,
        !            68:      comport,
        !            69:      comtype=0,
        !            70:      dialopt=0;
        !            71: 
        !            72: volatile
        !            73: long totalclock;
        !            74: 
        !            75: struct serialData sd;
        !            76: 
        !            77: void (__interrupt __far *oldtimer)(void);
        !            78: 
        !            79: void __interrupt __far
        !            80: newtimer(void)
        !            81: {
        !            82:      totalclock++;
        !            83:      _chain_intr(oldtimer);
        !            84: }
        !            85: 
        !            86: int
        !            87: getBIOSvmode(void)
        !            88: {
        !            89:      union REGPACK regs;
        !            90: 
        !            91:      memset(&regs,0,sizeof(union REGPACK));
        !            92:      regs.h.ah=0x0F;
        !            93:      regs.h.al=0x00;
        !            94:      intr(0x10,&regs);
        !            95:      return(regs.h.al);
        !            96: }
        !            97: 
        !            98: void
        !            99: setBIOSvmode(int m)
        !           100: {
        !           101:      union REGPACK regs;
        !           102: 
        !           103:      memset(&regs,0,sizeof(union REGPACK));
        !           104:      regs.h.ah=0x00;
        !           105:      regs.h.al=m;
        !           106:      intr(0x10,&regs);
        !           107: }
        !           108: 
        !           109: void
        !           110: writesettings(void)
        !           111: {
        !           112:      FILE *fp;
        !           113: 
        !           114:      fp=fopen("modem.dat","w");
        !           115:      if (fp != NULL) {
        !           116:           fprintf(fp,"COM PORT: %d\n",comport);
        !           117:           fprintf(fp,"BAUD RATE: %ld\n",bps);
        !           118:           fprintf(fp,"INIT STRING: %s\n",initstring);
        !           119:           fprintf(fp,"ANSWER STRING: %s\n",answerstring);
        !           120:           fprintf(fp,"DIAL COMMAND: %s\n",dialstring);
        !           121:           fprintf(fp,"PHONE NUMBER: %s\n",dialnumber);
        !           122:           fclose(fp);
        !           123:      }
        !           124: }
        !           125: 
        !           126: void
        !           127: stripblanks(char *stg)
        !           128: {
        !           129:      short i;
        !           130:      char buf[80];
        !           131: 
        !           132:      strcpy(buf,stg);
        !           133:      for (i=0 ; i < strlen(buf) ; i++) {
        !           134:           if (buf[i] == ' ') {
        !           135:                continue;
        !           136:           }
        !           137:           *stg++=buf[i];
        !           138:      }
        !           139:      *stg=0;
        !           140: }
        !           141: 
        !           142: void
        !           143: readsettings(void)
        !           144: {
        !           145:      short i,n;
        !           146:      long l;
        !           147:      char buf[80],*ptr;
        !           148:      FILE *fp;
        !           149: 
        !           150:      fp=fopen("modem.dat","r");
        !           151:      if (fp == NULL) {
        !           152:           return;
        !           153:      }
        !           154:      while (fgets(buf,80,fp) != NULL) {
        !           155:           for (i=0 ; i < NUMSETOPTS ; i++) {
        !           156:                if ((ptr=strstr(buf,setopts[i])) != NULL) {
        !           157:                     ptr+=strlen(setopts[i]);
        !           158:                     switch (i) {
        !           159:                     case 0:   // com port
        !           160:                          sscanf(ptr,"%d",&n);
        !           161:                          if (n < 1 || n > 4) {
        !           162:                               break;
        !           163:                          }
        !           164:                          comport=n;
        !           165:                          break;
        !           166:                     case 1:   // baud rate
        !           167:                          sscanf(ptr,"%ld",&l);
        !           168:                          if (l < 2400L || l > 115200L) {
        !           169:                               break;
        !           170:                          }
        !           171:                          bps=l;
        !           172:                          break;
        !           173:                     case 2:   // init string
        !           174:                          strcpy(initstring,ptr);
        !           175:                          initstring[strlen(initstring)-1]=0;
        !           176:                          stripblanks(initstring);
        !           177:                          break;
        !           178:                     case 3:   // answer command
        !           179:                          strcpy(answerstring,ptr);
        !           180:                          answerstring[strlen(answerstring)-1]=0;
        !           181:                          stripblanks(answerstring);
        !           182:                          break;
        !           183:                     case 4:   // dial command
        !           184:                          strcpy(dialstring,ptr);
        !           185:                          dialstring[strlen(dialstring)-1]=0;
        !           186:                          stripblanks(dialstring);
        !           187:                          break;
        !           188:                     case 5:   // phone number
        !           189:                          strcpy(dialnumber,ptr);
        !           190:                          dialnumber[strlen(dialnumber)-1]=0;
        !           191:                          stripblanks(dialnumber);
        !           192:                          break;
        !           193:                     }
        !           194:                }
        !           195:           }
        !           196:      }
        !           197:      fclose(fp);
        !           198: }
        !           199: 
        !           200: void
        !           201: showscn(char *sname)
        !           202: {
        !           203: #ifndef SCNSLINKED
        !           204:      FILE *fp;
        !           205: 
        !           206:      fp=fopen(sname,"rb");
        !           207:      if (fp != NULL) {
        !           208:           fread(sbuf,1,SCRSIZE,fp);
        !           209:           fclose(fp);
        !           210:           movedata(FP_SEG(sbuf),FP_OFF(sbuf),FP_SEG(vmem),FP_OFF(vmem),SCRSIZE);
        !           211:      }
        !           212: #else
        !           213:      movedata(FP_SEG(scntbl),FP_OFF(scntbl),FP_SEG(vmem),FP_OFF(vmem),SCRSIZE);
        !           214: #endif
        !           215: }
        !           216: 
        !           217: void
        !           218: gprintf(FILE *fp,char *fmt,...)
        !           219: {
        !           220:      char buf[80];
        !           221:      va_list argptr;
        !           222: 
        !           223:      va_start(argptr,fmt);
        !           224:      vsprintf(buf,fmt,argptr);
        !           225:      va_end(argptr);
        !           226:      _outtext(buf);
        !           227: }
        !           228: 
        !           229: void
        !           230: waitsecs(long secs)
        !           231: {
        !           232:      long delayclock;
        !           233: 
        !           234:      delayclock=totalclock+(secs*CLKIPS);
        !           235:      while (totalclock < delayclock && !kbhit());
        !           236: }
        !           237: 
        !           238: void
        !           239: mdmsendstr(char *stg)
        !           240: {
        !           241:      short i;
        !           242: 
        !           243:      for (i=0 ; i < strlen(stg) ; i++) {
        !           244:           writeSer(&sd,stg[i]);
        !           245:      }
        !           246:      writeSer(&sd,'\r');
        !           247: }
        !           248: 
        !           249: void
        !           250: mdmreset(void)
        !           251: {
        !           252:      _settextcolor(0);
        !           253:      gprintf(stdout,"\nResetting com port..");
        !           254:      setDTR(&sd,0);
        !           255:      waitsecs(1);
        !           256:      setDTR(&sd,1);
        !           257: }
        !           258: 
        !           259: void
        !           260: showinstructions(char *stg)
        !           261: {
        !           262:      int  ctrx;
        !           263: 
        !           264:      _setbkcolor(1);
        !           265:      _settextcolor(14);
        !           266:      _settextposition(25,1);
        !           267:      gprintf(stdout,"�������������������������������������������������������������������������������");
        !           268:      if (strlen(stg) == 0) {
        !           269:           return;
        !           270:      }
        !           271:      ctrx=strlen(stg)/2;
        !           272:      _settextposition(25,40-ctrx-1);
        !           273:      gprintf(stdout," %s ",stg);
        !           274: }
        !           275: 
        !           276: void
        !           277: mdmdial(void)
        !           278: {
        !           279:      long c,delayclock,mdmsendcmd,mdmstate=0,more=1,stat,x=0;
        !           280:      char cmdstg[80];
        !           281: 
        !           282:      showinstructions("PRESS ANY KEY TO ABORT");
        !           283:      _settextwindow(14,1,24,80);
        !           284:      _settextposition(14,1);
        !           285:      stat=initSerial(&sd,comport-1,USE_16550,256L,256L);
        !           286:      if (stat == SER_OK) {
        !           287:           setBPS(&sd,bps);
        !           288:           mdmreset();
        !           289:           mdmsendcmd=1;
        !           290:           _settextcolor(0);
        !           291:           gprintf(stdout,"\nInitializing...");
        !           292:           do {
        !           293:                if (mdmsendcmd) {
        !           294:                     switch (mdmstate) {
        !           295:                     case 0:
        !           296:                          _settextcolor(11);
        !           297:                          gprintf(stdout,"\nSETUP: %s",initstring);
        !           298:                          mdmsendstr(initstring);
        !           299:                          delayclock=totalclock+(CLKIPS*2);
        !           300:                          break;
        !           301:                     case 1:
        !           302:                          _settextcolor(11);
        !           303:                          if (dialopt) {
        !           304:                               sprintf(cmdstg,"%s%s",dialstring,dialnumber);
        !           305:                          }
        !           306:                          else {
        !           307:                               sprintf(cmdstg,"%s",answerstring);
        !           308:                          }
        !           309:                          gprintf(stdout,"\nSETUP: %s",cmdstg);
        !           310:                          mdmsendstr(cmdstg);
        !           311:                          delayclock=totalclock+(CLKIPS*45);
        !           312:                          break;
        !           313:                     }
        !           314:                     mdmsendcmd=0;
        !           315:                }
        !           316:                if (rxBuffEmpty(&sd) == 0) {
        !           317:                     if (x == 0) {
        !           318:                          _settextcolor(14);
        !           319:                          gprintf(stdout,"\nMODEM: ");
        !           320:                     }
        !           321:                     c=readSer(&sd);
        !           322:                     if (c == 0) {
        !           323:                          continue;
        !           324:                     }
        !           325:                     mdmresp[x++]=c;
        !           326:                     if (c == '\n' || c == '\r') {
        !           327:                          switch (mdmstate) {
        !           328:                          case 0:
        !           329:                               strupr(mdmresp);
        !           330:                               if (strstr(mdmresp,"OK") != 0) {
        !           331:                                    mdmstate++;
        !           332:                               }
        !           333:                               else if (strstr(mdmresp,"ERROR") != 0) {
        !           334:                                    mdmsendcmd=1;
        !           335:                               }
        !           336:                               break;
        !           337:                          case 1:
        !           338:                               strupr(mdmresp);
        !           339:                               if (dialopt == 0) {
        !           340:                                    if (strstr(mdmresp,"OK") != 0) {
        !           341:                                         mdmstate++;
        !           342:                                         delayclock=totalclock+CLKIPS;
        !           343:                                    }
        !           344:                                    break;
        !           345:                               }
        !           346:                               if (strstr(mdmresp,"CONNECT") != 0) {
        !           347:                                    connected=1;
        !           348:                                    more=0;
        !           349:                               }
        !           350:                               else if (strstr(mdmresp,"BUSY") != 0
        !           351:                                  || strstr(mdmresp,"NO") != 0) {
        !           352:                                    mdmsendcmd=1;
        !           353:                               }
        !           354:                               break;
        !           355:                          case 2:
        !           356:                               strupr(mdmresp);
        !           357:                               if (strstr(mdmresp,"CONNECT") != 0) {
        !           358:                                    connected=1;
        !           359:                                    more=0;
        !           360:                               }
        !           361:                               break;
        !           362:                          }
        !           363:                          memset(mdmresp,0,sizeof(mdmresp));
        !           364:                          x=0;
        !           365:                     }
        !           366:                     else {
        !           367:                          gprintf(stdout,"%c",c);
        !           368:                     }
        !           369:                }
        !           370:                switch (mdmstate) {
        !           371:                case 0:
        !           372:                     if (totalclock >= delayclock) {
        !           373:                          mdmreset();
        !           374:                          mdmsendcmd=1;
        !           375:                     }
        !           376:                     break;
        !           377:                case 1:
        !           378:                     if (totalclock >= delayclock) {
        !           379:                          mdmreset();
        !           380:                          mdmsendcmd=1;
        !           381:                     }
        !           382:                     break;
        !           383:                case 2:
        !           384:                     if (totalclock >= delayclock) {
        !           385:                          _settextcolor(0);
        !           386:                          gprintf(stdout,"\nWaiting for call...");
        !           387:                          delayclock=totalclock+(CLKIPS*15);
        !           388:                     }
        !           389:                     break;
        !           390:                }
        !           391:                if (kbhit()) {
        !           392:                     getch();
        !           393:                     gprintf(stdout,"\nAborting...");
        !           394:                     more=0;
        !           395:                     mdmreset();
        !           396:                }
        !           397:           } while (more);
        !           398:           if (!connected) {
        !           399:                setRTS(&sd,0);
        !           400:                setDTR(&sd,0);
        !           401:           }
        !           402:      }
        !           403:      _settextwindow(1,1,25,80);
        !           404:      _settextcolor(14);
        !           405: }
        !           406: 
        !           407: void
        !           408: mdmterm(void)
        !           409: {
        !           410:      int  c,hexmode=0,more;
        !           411:      struct rccoord pos;
        !           412: 
        !           413:      showinstructions("CONNECTED");
        !           414:      _settextwindow(14,1,24,80);
        !           415:      _settextposition(14,1);
        !           416:      _settextcolor(0);
        !           417:      _displaycursor(_GCURSORON);
        !           418:      do {
        !           419:           if (kbhit()) {
        !           420:                c=getch();
        !           421:                switch (c) {
        !           422:                case 0x00:
        !           423:                     switch(getch()) {
        !           424:                     case 0x44:
        !           425:                          quitprog=2;
        !           426:                          more=0;
        !           427:                          break;
        !           428:                     case 0x23:     // ALT-H (hex mode)
        !           429:                          hexmode^=1;
        !           430:                          break;
        !           431:                     }
        !           432:                     break;
        !           433:                }
        !           434:                if (hexmode) {
        !           435:                     gprintf(stdout,"(%02X)",c);
        !           436:                }
        !           437:                else if (isascii(c)) {
        !           438:                     switch (c) {
        !           439:                     case 0x08:
        !           440:                          writeSer(&sd,c);
        !           441:                          if (dialopt == 0) {
        !           442:                               pos=_gettextposition();
        !           443:                               if (pos.col > 1) {
        !           444:                                    pos.col--;
        !           445:                                    _settextposition(pos.row,pos.col);
        !           446:                                    gprintf(stdout," ");
        !           447:                                    _settextposition(pos.row,pos.col);
        !           448:                               }
        !           449:                          }
        !           450:                          break;
        !           451:                     case 0x0A:
        !           452:                     case 0x0D:
        !           453:                          writeSer(&sd,c);
        !           454:                          if (dialopt == 0) {
        !           455:                               gprintf(stdout,"\n");
        !           456:                          }
        !           457:                          break;
        !           458:                     case 0x1B:
        !           459:                          _settextcolor(0);
        !           460:                          gprintf(stdout,"\n(DISCONNECTING)\n");
        !           461:                          setRTS(&sd,0);
        !           462:                          setDTR(&sd,0);
        !           463:                          connected=0;
        !           464:                          more=0;
        !           465:                          break;
        !           466:                     default:
        !           467:                          writeSer(&sd,c);
        !           468:                          if (dialopt == 0) {
        !           469:                               gprintf(stdout,"%c",c);
        !           470:                          }
        !           471:                          break;
        !           472:                     }
        !           473:                }
        !           474:           }
        !           475:           else if (rxBuffEmpty(&sd) == 0) {
        !           476:                c=readSer(&sd);
        !           477:                if (hexmode) {
        !           478:                     gprintf(stdout,"(%02X)",c);
        !           479:                }
        !           480:                else if (isascii(c)) {
        !           481:                     switch (c) {
        !           482:                     case 0x08:
        !           483:                          pos=_gettextposition();
        !           484:                          if (pos.col > 1) {
        !           485:                               pos.col--;
        !           486:                               _settextposition(pos.row,pos.col);
        !           487:                               gprintf(stdout," ");
        !           488:                               _settextposition(pos.row,pos.col);
        !           489:                          }
        !           490:                          break;
        !           491:                     case 0x0A:
        !           492:                     case 0x0D:
        !           493:                          gprintf(stdout,"\n");
        !           494:                          break;
        !           495:                     default:
        !           496:                          _settextcolor(10);
        !           497:                          gprintf(stdout,"%c",c);
        !           498:                          if (dialopt == 0) {
        !           499:                               writeSer(&sd,c);
        !           500:                          }
        !           501:                          break;
        !           502:                     }
        !           503:                }
        !           504:           }
        !           505:      } while (more);
        !           506:      _displaycursor(_GCURSOROFF);
        !           507:      deInitSerial(&sd);
        !           508: }
        !           509: 
        !           510: void
        !           511: showvalues(int m)
        !           512: {
        !           513:      int  i;
        !           514: 
        !           515:      _settextwindow(1,1,25,80);
        !           516:      for (i=0 ; i < DIALMDM ; i++) {
        !           517:           if (i == m) {
        !           518:                _settextcolor(0);
        !           519:                _setbkcolor(7);
        !           520:           }
        !           521:           else {
        !           522:                if (i > SETBPS) {
        !           523:                     if (comtype) {
        !           524:                          switch (i) {
        !           525:                          case SETINITS:
        !           526:                          case SETDIALO:
        !           527:                               _settextcolor(14);
        !           528:                               break;
        !           529:                          case SETANSS:
        !           530:                               if (dialopt) {
        !           531:                                    _settextcolor(8);
        !           532:                               }
        !           533:                               else {
        !           534:                                    _settextcolor(14);
        !           535:                               }
        !           536:                               break;
        !           537:                          case SETDIALS:
        !           538:                          case SETDIALN:
        !           539:                               if (dialopt) {
        !           540:                                    _settextcolor(14);
        !           541:                               }
        !           542:                               else {
        !           543:                                    _settextcolor(8);
        !           544:                               }
        !           545:                               break;
        !           546:                          }
        !           547:                     }
        !           548:                     else {
        !           549:                          _settextcolor(8);
        !           550:                     }
        !           551:                }
        !           552:                else {
        !           553:                     _settextcolor(14);
        !           554:                }
        !           555:                _setbkcolor(1);
        !           556:           }
        !           557:           switch (i) {
        !           558:           case SETSER:
        !           559:                _settextposition(5,24);
        !           560:                gprintf(stdout,"%s",comtype ? "MODEM " : "SERIAL");
        !           561:                break;
        !           562:           case SETCOM:
        !           563:                _settextposition(6,24);
        !           564:                gprintf(stdout,"%d",comport);
        !           565:                break;
        !           566:           case SETBPS:
        !           567:                _settextposition(7,24);
        !           568:                gprintf(stdout,"%5d",bps);
        !           569:                break;
        !           570:           case SETINITS:
        !           571:                _settextposition(8,24);
        !           572:                gprintf(stdout,"%-48.48s",initstring);
        !           573:                break;
        !           574:           case SETDIALO:
        !           575:                _settextposition(9,24);
        !           576:                gprintf(stdout,"%s",dialopt ? "DIAL  " : "ANSWER");
        !           577:                break;
        !           578:           case SETANSS:
        !           579:                _settextposition(10,24);
        !           580:                gprintf(stdout,"%-48.48s",answerstring);
        !           581:                break;
        !           582:           case SETDIALS:
        !           583:                _settextposition(11,24);
        !           584:                gprintf(stdout,"%-48.48s",dialstring);
        !           585:                break;
        !           586:           case SETDIALN:
        !           587:                _settextposition(12,24);
        !           588:                gprintf(stdout,"%-48.48s",dialnumber);
        !           589:                break;
        !           590:           }
        !           591:      }
        !           592: }
        !           593: 
        !           594: void main(void)
        !           595: {
        !           596:      long c,lastbps,menustate=0,more,oldcomport,oldbps;
        !           597:      char oldinit[60];
        !           598: 
        !           599:      oldtimer=_dos_getvect(0x08);
        !           600:      _dos_setvect(0x08,newtimer);
        !           601:      oldvmode=getBIOSvmode();
        !           602:      _setvideomode(_TEXTC80);
        !           603:      vmem=0xB800<<4;
        !           604:      showscn("mdmscrn.bin");
        !           605:      _settextwindow(1,1,25,80);
        !           606:      _setbkcolor(1);
        !           607:      _settextcolor(14);
        !           608:      bps=9600L;
        !           609:      comport=1;
        !           610:      strcpy(initstring,"AT&F&C1&D2");
        !           611:      strcpy(dialstring,"ATDT");
        !           612:      readsettings();
        !           613:      _displaycursor(_GCURSOROFF);
        !           614:      do {
        !           615:           switch (menustate) {
        !           616:           case SETCOM:
        !           617:                oldcomport=comport;
        !           618:                more=1;
        !           619:                showvalues(menustate);
        !           620:                showinstructions("Press the spacebar to toggle between COM port options");
        !           621:                do {
        !           622:                     switch (getch()) {
        !           623:                     case 0:
        !           624:                          switch (getch()) {
        !           625:                          case 0x48:     // up arrow
        !           626:                               menustate--;
        !           627:                               if (menustate < 0) {
        !           628:                                    menustate=0;
        !           629:                               }
        !           630:                               more=0;
        !           631:                               break;
        !           632:                          case 0x50:     // down arrow
        !           633:                               more=0;
        !           634:                               break;
        !           635:                          case 0x44:     // F10
        !           636:                               more=0;
        !           637:                               if (comtype) {
        !           638:                                    menustate=DIALMDM;
        !           639:                               }
        !           640:                               else {
        !           641:                                    quitprog=2;
        !           642:                               }
        !           643:                               break;
        !           644:                          }
        !           645:                          break;
        !           646:                     case 0x20:
        !           647:                          comport++;
        !           648:                          if (comport > 4) {
        !           649:                               comport=1;
        !           650:                          }
        !           651:                          showvalues(menustate);
        !           652:                          break;
        !           653:                     case 0x0D:
        !           654:                          more=0;
        !           655:                          break;
        !           656:                     case 0x1B:
        !           657:                          quitprog=1;
        !           658:                          comport=oldcomport;
        !           659:                          more=0;
        !           660:                          break;
        !           661:                     }
        !           662:                } while (more);
        !           663:                if (menustate == SETCOM) {
        !           664:                     menustate++;
        !           665:                }
        !           666:                break;
        !           667:           case SETSER:
        !           668:                more=1;
        !           669:                showvalues(menustate);
        !           670:                showinstructions("Press the spacebar to toggle between SERIAL & MODEM");
        !           671:                do {
        !           672:                     switch (getch()) {
        !           673:                     case 0:
        !           674:                          switch (getch()) {
        !           675:                          case 0x48:     // up arrow
        !           676:                               menustate--;
        !           677:                               if (menustate < 0) {
        !           678:                                    menustate=0;
        !           679:                               }
        !           680:                               more=0;
        !           681:                               break;
        !           682:                          case 0x50:     // down arrow
        !           683:                               more=0;
        !           684:                               break;
        !           685:                          case 0x44:     // F10
        !           686:                               more=0;
        !           687:                               if (comtype) {
        !           688:                                    menustate=DIALMDM;
        !           689:                               }
        !           690:                               else {
        !           691:                                    quitprog=2;
        !           692:                               }
        !           693:                               break;
        !           694:                          }
        !           695:                          break;
        !           696:                     case 0x20:
        !           697:                          comtype^=1;
        !           698:                          break;
        !           699:                     case 0x0D:
        !           700:                          more=0;
        !           701:                          break;
        !           702:                     case 0x1B:
        !           703:                          quitprog=1;
        !           704:                          more=0;
        !           705:                          break;
        !           706:                     }
        !           707:                     showvalues(menustate);
        !           708:                } while (more);
        !           709:                if (menustate == SETSER) {
        !           710:                     menustate++;
        !           711:                }
        !           712:                break;
        !           713:           case SETBPS:
        !           714:                oldbps=bps;
        !           715:                more=1;
        !           716:                showvalues(menustate);
        !           717:                showinstructions("Press the spacebar to toggle between baud rate selections");
        !           718:                do {
        !           719:                     c=getch();
        !           720:                     if (c == 0) {
        !           721:                          switch (getch()) {
        !           722:                          case 0x48:
        !           723:                               menustate--;
        !           724:                               if (menustate < 0) {
        !           725:                                    menustate=0;
        !           726:                               }
        !           727:                               more=0;
        !           728:                               break;
        !           729:                          case 0x50:
        !           730:                               more=0;
        !           731:                               break;
        !           732:                          case 0x44:     // F10
        !           733:                               more=0;
        !           734:                               if (comtype) {
        !           735:                                    menustate=DIALMDM;
        !           736:                               }
        !           737:                               else {
        !           738:                                    quitprog=2;
        !           739:                               }
        !           740:                               break;
        !           741:                          }
        !           742:                     }
        !           743:                     else if (c == 0x20) {
        !           744:                          switch (bps) {
        !           745:                          case 9600:
        !           746:                               bps=14400;
        !           747:                               break;
        !           748:                          case 14400:
        !           749:                               bps=19200;
        !           750:                               break;
        !           751:                          case 19200:
        !           752:                               bps=28800;
        !           753:                               break;
        !           754:                          case 28800:
        !           755:                               bps=9600;
        !           756:                               break;
        !           757:                          }
        !           758:                     }
        !           759:                     else if (c == 0x0D) {
        !           760:                          more=0;
        !           761:                     }
        !           762:                     else if (c == 0x1B) {
        !           763:                          bps=oldbps;
        !           764:                          quitprog=1;
        !           765:                          more=0;
        !           766:                     }
        !           767:                     showvalues(menustate);
        !           768:                } while (more);
        !           769:                if (menustate == SETBPS) {
        !           770:                     if (comtype) {
        !           771:                          menustate++;
        !           772:                     }
        !           773:                     else {
        !           774:                          menustate=SETSER;
        !           775:                     }
        !           776:                }
        !           777:                break;
        !           778:           case SETINITS:
        !           779:                strcpy(oldinit,initstring);
        !           780:                more=1;
        !           781:                showvalues(menustate);
        !           782:                showinstructions("Type in an initialization string for your modem");
        !           783:                do {
        !           784:                     c=getch();
        !           785:                     c=toupper(c);
        !           786:                     if (c == 0) {
        !           787:                          switch (getch()) {
        !           788:                          case 0x48:
        !           789:                               menustate--;
        !           790:                               if (menustate < 0) {
        !           791:                                    menustate=0;
        !           792:                               }
        !           793:                               more=0;
        !           794:                               break;
        !           795:                          case 0x50:
        !           796:                               more=0;
        !           797:                               break;
        !           798:                          case 0x44:     // F10
        !           799:                               more=0;
        !           800:                               if (comtype) {
        !           801:                                    menustate=DIALMDM;
        !           802:                               }
        !           803:                               else {
        !           804:                                    quitprog=2;
        !           805:                               }
        !           806:                               break;
        !           807:                          }
        !           808:                     }
        !           809:                     if (c == 0x08) {
        !           810:                          initstring[strlen(initstring)-1]=0;
        !           811:                     }
        !           812:                     else if (c == 0x0D) {
        !           813:                          more=0;
        !           814:                     }
        !           815:                     else if (c == 0x1B) {
        !           816:                          strcpy(initstring,oldinit);
        !           817:                          quitprog=1;
        !           818:                          more=0;
        !           819:                     }
        !           820:                     else if (strlen(initstring) < INITSLEN) {
        !           821:                          initstring[strlen(initstring)]=c;
        !           822:                     }
        !           823:                     showvalues(menustate);
        !           824:                } while (more);
        !           825:                if (menustate == SETINITS) {
        !           826:                     menustate++;
        !           827:                }
        !           828:                break;
        !           829:           case SETANSS:
        !           830:                strcpy(oldinit,answerstring);
        !           831:                more=1;
        !           832:                showvalues(menustate);
        !           833:                showinstructions("Type in your modem's answer command string or use \"ATS0=1\"");
        !           834:                do {
        !           835:                     c=getch();
        !           836:                     c=toupper(c);
        !           837:                     if (c == 0) {
        !           838:                          switch (getch()) {
        !           839:                          case 0x48:
        !           840:                               menustate--;
        !           841:                               if (menustate < 0) {
        !           842:                                    menustate=0;
        !           843:                               }
        !           844:                               more=0;
        !           845:                               break;
        !           846:                          case 0x50:
        !           847:                               more=0;
        !           848:                               break;
        !           849:                          case 0x44:     // F10
        !           850:                               more=0;
        !           851:                               if (comtype) {
        !           852:                                    menustate=DIALMDM;
        !           853:                               }
        !           854:                               else {
        !           855:                                    quitprog=2;
        !           856:                               }
        !           857:                               break;
        !           858:                          }
        !           859:                     }
        !           860:                     if (c == 0x08) {
        !           861:                          answerstring[strlen(answerstring)-1]=0;
        !           862:                     }
        !           863:                     else if (c == 0x0D) {
        !           864:                          more=0;
        !           865:                     }
        !           866:                     else if (c == 0x1B) {
        !           867:                          strcpy(answerstring,oldinit);
        !           868:                          quitprog=1;
        !           869:                          more=0;
        !           870:                     }
        !           871:                     else if (strlen(answerstring) < ANSSLEN) {
        !           872:                          answerstring[strlen(answerstring)]=c;
        !           873:                     }
        !           874:                     showvalues(menustate);
        !           875:                } while (more);
        !           876:                if (menustate == SETANSS) {
        !           877:                     menustate=DIALMDM;
        !           878:                }
        !           879:                break;
        !           880:           case SETDIALS:
        !           881:                strcpy(oldinit,dialstring);
        !           882:                more=1;
        !           883:                showvalues(menustate);
        !           884:                showinstructions("Type in your modem's dial command string or use \"ATDT\"");
        !           885:                do {
        !           886:                     c=getch();
        !           887:                     c=toupper(c);
        !           888:                     if (c == 0) {
        !           889:                          switch (getch()) {
        !           890:                          case 0x48:
        !           891:                               menustate=SETDIALO;
        !           892:                               more=0;
        !           893:                               break;
        !           894:                          case 0x50:
        !           895:                               more=0;
        !           896:                               break;
        !           897:                          case 0x44:     // F10
        !           898:                               more=0;
        !           899:                               if (comtype) {
        !           900:                                    menustate=DIALMDM;
        !           901:                               }
        !           902:                               else {
        !           903:                                    quitprog=2;
        !           904:                               }
        !           905:                               break;
        !           906:                          }
        !           907:                     }
        !           908:                     if (c == 0x08) {
        !           909:                          dialstring[strlen(dialstring)-1]=0;
        !           910:                     }
        !           911:                     else if (c == 0x0D) {
        !           912:                          more=0;
        !           913:                     }
        !           914:                     else if (c == 0x1B) {
        !           915:                          strcpy(dialstring,oldinit);
        !           916:                          quitprog=1;
        !           917:                          more=0;
        !           918:                     }
        !           919:                     else if (strlen(dialstring) < DIALSLEN) {
        !           920:                          dialstring[strlen(dialstring)]=c;
        !           921:                     }
        !           922:                     showvalues(menustate);
        !           923:                } while (more);
        !           924:                if (menustate == SETDIALS) {
        !           925:                     menustate++;
        !           926:                }
        !           927:                break;
        !           928:           case SETDIALO:
        !           929:                more=1;
        !           930:                showvalues(menustate);
        !           931:                showinstructions("Press the spacebar to toggle between ANSWER and DIAL");
        !           932:                do {
        !           933:                     switch (getch()) {
        !           934:                     case 0:
        !           935:                          switch (getch()) {
        !           936:                          case 0x48:
        !           937:                               menustate--;
        !           938:                               if (menustate < 0) {
        !           939:                                    menustate=0;
        !           940:                               }
        !           941:                               more=0;
        !           942:                               break;
        !           943:                          case 0x50:
        !           944:                               more=0;
        !           945:                               break;
        !           946:                          case 0x44:     // F10
        !           947:                               more=0;
        !           948:                               if (comtype) {
        !           949:                                    menustate=DIALMDM;
        !           950:                               }
        !           951:                               else {
        !           952:                                    quitprog=2;
        !           953:                               }
        !           954:                               break;
        !           955:                          }
        !           956:                          break;
        !           957:                     case 0x20:
        !           958:                          dialopt^=1;
        !           959:                          break;
        !           960:                     case 0x0D:
        !           961:                          more=0;
        !           962:                          break;
        !           963:                     case 0x1B:
        !           964:                          quitprog=1;
        !           965:                          more=0;
        !           966:                          break;
        !           967:                     }
        !           968:                     showvalues(menustate);
        !           969:                } while (more);
        !           970:                if (menustate == SETDIALO) {
        !           971:                     if (dialopt) {
        !           972:                          menustate=SETDIALS;
        !           973:                     }
        !           974:                     else {
        !           975:                          menustate=SETANSS;
        !           976:                     }
        !           977:                }
        !           978:                break;
        !           979:           case SETDIALN:
        !           980:                strcpy(oldinit,dialnumber);
        !           981:                more=1;
        !           982:                showvalues(menustate);
        !           983:                showinstructions("Type in the phone number to dial");
        !           984:                do {
        !           985:                     c=toupper(getch());
        !           986:                     switch (c) {
        !           987:                     case 0x00:
        !           988:                          switch (getch()) {
        !           989:                          case 0x48:
        !           990:                               menustate--;
        !           991:                               if (menustate < 0) {
        !           992:                                    menustate=0;
        !           993:                               }
        !           994:                               more=0;
        !           995:                               break;
        !           996:                          case 0x50:
        !           997:                               more=0;
        !           998:                               break;
        !           999:                          case 0x44:     // F10
        !          1000:                               more=0;
        !          1001:                               if (comtype) {
        !          1002:                                    menustate=DIALMDM;
        !          1003:                               }
        !          1004:                               else {
        !          1005:                                    quitprog=2;
        !          1006:                               }
        !          1007:                               break;
        !          1008:                          }
        !          1009:                          break;
        !          1010:                     case 0x08:
        !          1011:                          dialnumber[strlen(dialnumber)-1]=0;
        !          1012:                          break;
        !          1013:                     case 0x0D:
        !          1014:                          more=0;
        !          1015:                          break;
        !          1016:                     case 0x1B:
        !          1017:                          strcpy(dialnumber,oldinit);
        !          1018:                          quitprog=1;
        !          1019:                          more=0;
        !          1020:                          break;
        !          1021:                     default:
        !          1022:                          if (strlen(dialnumber) < DIALNLEN) {
        !          1023:                               dialnumber[strlen(dialnumber)]=c;
        !          1024:                          }
        !          1025:                          break;
        !          1026:                     }
        !          1027:                     showvalues(menustate);
        !          1028:                } while (more);
        !          1029:                if (menustate == SETDIALN) {
        !          1030:                     menustate++;
        !          1031:                }
        !          1032:                break;
        !          1033:           case DIALMDM:
        !          1034:                mdmdial();
        !          1035:                if (connected) {
        !          1036:                     mdmterm();
        !          1037:                }
        !          1038:                menustate=0;
        !          1039:                break;
        !          1040:           }
        !          1041:           showvalues(menustate);
        !          1042:      } while ((!connected) && (!quitprog));
        !          1043:      setBIOSvmode(oldvmode);
        !          1044:      fprintf(stdout,"\n");
        !          1045:      _dos_setvect(0x08,oldtimer);
        !          1046:      writesettings();
        !          1047:      if (quitprog == 2) {
        !          1048:           if (comtype == 0) {
        !          1049:                exit(2);
        !          1050:           }
        !          1051:           else if (connected) {
        !          1052:                exit(1);
        !          1053:           }
        !          1054:      }
        !          1055:      exit(0);
        !          1056: }
        !          1057: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.