⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 keyboard.c

📁 DOS下开发网络程序的SOCK库,有示例程序,包括FTP
💻 C
字号:
/*

DM&P Mity-Mite Demo Program.
Copyright (C) 2002 by DM&P.

KeyboardSetup() will read key from keyboard for network setup when BOOTP/DHCP
is not supported and default configuration is not okay.

*/

#include "keyboard.h"
#include "grlcd.h"
#include <conio.h>
#include <mem.h>
#include <stdio.h>

/* Read key press and display it. */
char *GetInput(int x,int y)
{
  static char szBuf[32];
  char c;
  int nIdx = 0;
  memset(szBuf,0,32);
  while(TRUE)
  {
    GrLcd_printf(x,y,"%-21s","");
    GrLcd_printf(x,y,"%s-",szBuf);
    c = getch();
    if(c=='-')
      return NULL;
    else if(c==13)
    {
      szBuf[nIdx] = 0;
      return szBuf;
    }
    else if(c==8)
    {
      if(nIdx>0)
        szBuf[--nIdx] = 0;
    }
    else
      szBuf[nIdx++] = c;
  }
}

/* Manual for network setup */
void NetworkSetup()
{
  char  c;
  char  szBuf[32];
  DWORD dwIp;
  char *p;
  while(TRUE)
  {
    GrLcd_ClearScreen();
    GrLcd_printf(0,0*8,"1.IP  2.Netmask");
    GrLcd_printf(0,1*8,"3.DNS 4.Gateway");
    GrLcd_printf(0,3*8,"(-) Exit");
    c = getch();
    GrLcd_ClearScreen();
    switch(c)
    {
    case '1':
      dwIp = DSock_GetHostIp();
      GrLcd_printf(0,0*8,"IP: %s",inet_ntoa(szBuf,dwIp));
      GrLcd_printf(0,1*8,"Input new IP:");
      GrLcd_printf(0,3*8,"(-) Skip  (Enter) OK");
      p = GetInput(0,2*8);
      if(p)
      {
        FILE *fp = fopen("dsock.cfg","wt");
        if(fp!=NULL)
        {
          fprintf(fp,"ip=%s\n",p);
          fprintf(fp,"netmask=%s\n",inet_ntoa(szBuf,DSock_GetNetmask()));
          fprintf(fp,"gateway=%s\n",inet_ntoa(szBuf,DSock_GetGateway()));
          fprintf(fp,"nameserver=%s\n",inet_ntoa(szBuf,DSock_GetDomainNameServer()));
          fclose(fp);
        }
      }
      break;
    case '2':
      dwIp = DSock_GetNetmask();
      GrLcd_printf(0,0*8,"Netmask: %s",inet_ntoa(szBuf,dwIp));
      GrLcd_printf(0,1*8,"Input new netmask:");
      GrLcd_printf(0,3*8,"(-) Skip  (Enter) OK");
      p = GetInput(0,2*8);
      if(p)
      {
        FILE *fp = fopen("dsock.cfg","wt");
        if(fp!=NULL)
        {
          fprintf(fp,"ip=%s\n",inet_ntoa(szBuf,DSock_GetHostIp()));
          fprintf(fp,"netmask=%s\n",p);
          fprintf(fp,"gateway=%s\n",inet_ntoa(szBuf,DSock_GetGateway()));
          fprintf(fp,"nameserver=%s\n",inet_ntoa(szBuf,DSock_GetDomainNameServer()));
          fclose(fp);
        }
      }
      break;
    case '3':
      dwIp = DSock_GetDomainNameServer();
      GrLcd_printf(0,0*8,"DNS: %s",inet_ntoa(szBuf,dwIp));
      GrLcd_printf(0,1*8,"Input new DNS:");
      GrLcd_printf(0,3*8,"(-) Skip  (Enter) OK");
      p = GetInput(0,2*8);
      if(p)
      {
        FILE *fp = fopen("dsock.cfg","wt");
        if(fp!=NULL)
        {
          fprintf(fp,"ip=%s\n",inet_ntoa(szBuf,DSock_GetHostIp()));
          fprintf(fp,"netmask=%s\n",inet_ntoa(szBuf,DSock_GetNetmask()));
          fprintf(fp,"gateway=%s\n",inet_ntoa(szBuf,DSock_GetGateway()));
          fprintf(fp,"nameserver=%s\n",p);
          fclose(fp);
        }
      }
      break;
    case '4':
      dwIp = DSock_GetGateway();
      GrLcd_printf(0,0*8,"Gateway: %s",inet_ntoa(szBuf,dwIp));
      GrLcd_printf(0,1*8,"Input new gateway:");
      GrLcd_printf(0,3*8,"(-) Skip  (Enter) OK");
      p = GetInput(0,2*8);
      if(p)
      {
        FILE *fp = fopen("dsock.cfg","wt");
        if(fp!=NULL)
        {
          fprintf(fp,"ip=%s\n",inet_ntoa(szBuf,DSock_GetHostIp()));
          fprintf(fp,"netmask=%s\n",inet_ntoa(szBuf,DSock_GetNetmask()));
          fprintf(fp,"gateway=%s\n",p);
          fprintf(fp,"nameserver=%s\n",inet_ntoa(szBuf,DSock_GetDomainNameServer()));
          fclose(fp);
        }
      }
      break;
    case '-':
      return;
    }
  }
}

/* Manual setup from keyboard */
void KeyboardSetup()
{
  char c;
  while(TRUE)
  {
    GrLcd_ClearScreen();
    GrLcd_printf(0,0*8,"(1) Network Setup");
    GrLcd_printf(0,1*8,"(2) Reboot");
    GrLcd_printf(0,3*8,"(-) Exit");
    c = getch();
    switch(c)
    {
    case '1':
      NetworkSetup();
      break;
    case '2':
      GrLcd_ClearScreen();
      GrLcd_printf(0,0*8,"Booting...");
      asm { db 0xea, 0x00, 0x00, 0xff, 0xff };
      break;
    case '3':
    case '-':
      return;
    }
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -