home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1994 #1 / monster.zip / monster / MODEM / PCL4W10.ZIP / LINE.C < prev    next >
Text File  |  1994-01-27  |  2KB  |  93 lines

  1. /*** line ***/
  2.  
  3. #include "windows.h"
  4. #include "line.h"
  5. #include "pcl4w.h"
  6. #include "config.h"
  7. #include "simple.h"
  8. #include "expect.h"
  9. #include "sioerror.h"
  10. #include "simpl_io.h"
  11.  
  12. extern HWND hMainWnd;
  13. extern int FatalFlag;
  14. extern int OnLineFlag;
  15.  
  16. /* private */
  17. static WORD RxSelector = 0;
  18. static WORD LockCount = 0;
  19. static void FreeDOSmemory(void);
  20.  
  21. void GoOnLine(void)
  22. {DWORD dwValue;
  23.  int RetCode;
  24.  int Port;
  25.  HMENU hMenu;
  26.  if(OnLineFlag) return;
  27.  /* allocate windows/DOS memory for receive buffer */
  28.  dwValue = GlobalDosAlloc(2<<(3+RXBUFFERCODE));
  29.  if(dwValue)
  30.    {/* get selector */
  31.     RxSelector = LOWORD(dwValue);
  32.     LockCount = GlobalPageLock(RxSelector);
  33.     if(LockCount==0) FatalFlag = TRUE;
  34.    }
  35.  else FatalFlag = TRUE;
  36.  /* memory allocation error ? */
  37.  if(FatalFlag)
  38.    {RxSelector = 0;
  39.     ErrorMessage("Cannot allocate memory");
  40.     return;
  41.    }
  42.  /* pass selector to PCL4C */
  43.  Port = GetPort();
  44.  RetCode = SioRxBuf(Port,RxSelector,RXBUFFERCODE);
  45.  if(RetCode<0)
  46.    {SioError(RetCode,"SioRxBuf");
  47.     FreeDOSmemory();
  48.     return;
  49.    }
  50.  else
  51.    {/* reset Port */
  52.     RetCode = SioReset(Port,GetBaud());
  53.     if(RetCode<0)
  54.       {SioError(RetCode,"SioReset");
  55.        FreeDOSmemory();
  56.        return;
  57.       }
  58.     /* set DTR & RTS */
  59.     SioDTR(Port,'S');
  60.     SioRTS(Port,'S');
  61.     /* Set FIFO level for 16550 */
  62.     if( SioFIFO(Port,LEVEL_14) ) DisplayLine("INS16550 detected");
  63.     /* clear PCL4C receive buffer */
  64.     SioRxFlush(Port);
  65.    }
  66.  OnLineFlag = TRUE;
  67.  SetTitle();
  68.  hMenu = GetMenu(hMainWnd);
  69.  CheckMenuItem(hMenu,MSG_OFFLINE,MF_BYCOMMAND | MF_UNCHECKED);
  70.  CheckMenuItem(hMenu,MSG_ONLINE,MF_BYCOMMAND | MF_CHECKED);
  71. } /* end GoOnLine */
  72.  
  73. void GoOffLine()
  74. {HMENU hMenu;
  75.  FreeDOSmemory();
  76.  if(OnLineFlag)
  77.    {SioDone((int)GetPort());
  78.     SetTitle();
  79.     hMenu = GetMenu(hMainWnd);
  80.     CheckMenuItem(hMenu,MSG_ONLINE,MF_BYCOMMAND | MF_UNCHECKED);
  81.     CheckMenuItem(hMenu,MSG_OFFLINE,MF_BYCOMMAND | MF_CHECKED);
  82.     OnLineFlag = FALSE;
  83.    }
  84. } /* end GoOffLine */
  85.  
  86. void FreeDOSmemory(void)
  87. {
  88.  if(RxSelector)
  89.    {GlobalPageUnlock(RxSelector);
  90.     GlobalDosFree(RxSelector);
  91.     RxSelector = 0;
  92.    }
  93. } /* end FreeDOSmemory */