/* ** LCR.C Communication Port Test Code ** ** Coded by : James P. Ketrenos ** ** You have permission to use this if you want. You are not required ** to use it. However, if it should cause harm to you, your computer, ** your dog, or anyone/thing you know/have/own, I am not responsible. ** ** By using this, or any file in this archive, you acknowledge that ** fact and accept it. ** */ #include #include #include #include "ll_comm.h" #include "ll_stat.h" #define VER_ID "0001.3000" int COM_BASE=0x3F8; int COM_IRQ=4; int COM_RATE=57600; int COM_SET=(BITS_8 | STOP_1 | NO_PARITY); int COM_FIFO=0; COMM Port; int ECHO=0; int LF=0; int xpos,ypos=0; char *screen=(char *)0x000b8000; ClearIO() { int x; for (x=0; x<80*25*2; x+=2) { screen[x]=0; screen[x+1]=7; } xpos=ypos=0; } PrintIO(char key) { switch (key) { case 9:xpos+=10; if (xpos>160) { xpos=0; ypos++; if (ypos>24) { ClearIO(); ypos=0; } } break; case 8:xpos-=2; if (xpos<0) xpos=0; screen[ypos*160+xpos]=0; break; case 13:xpos=0; break; case 10:ypos++; if (ypos>24) { ClearIO(); ypos=0; } break; default:screen[ypos*160+xpos]=key; xpos+=2; if (xpos>160) { xpos=0; ypos++; if (ypos>24) { ClearIO(); ypos=0; } } } } WriteStr(COMM Port, char *str) { for (; *str; str++) ioWriteByte(Port, *str); } PrintStr(char *str) { for (; *str; str++) PrintIO(*str); } int main(int argc, char *args[]) { int key,count,prior; int COM_TEMP; int Escape=0; status(ST_RESET,"LCR.LOG"); status(ST_ECHO,""); status(ST_SHOW,"[ LCR (R) Logical Comm Routines v%s ]",VER_ID); status(ST_ECHO,"[ Copyright (C) 1994 by J.P.K. ]"); status(ST_ECHO,""); status(ST_ECHO,"See LCR.NFO for important information."); status(ST_SHOW,""); for (count=1; count 115200) { status(ST_SHOW,"Invalid Baud Rate. Valid Range 1 - 115200."); exit(-1); } printf("Baud set to: %d\n",COM_RATE); break; case 'i':sscanf(&args[count][2],"%d",&COM_IRQ); if (COM_IRQ&!0x07) { status(ST_SHOW,"Invalid IRQ. Valid Range 0 - 7."); exit(-1); } printf("IRQ set to: %d\n",COM_IRQ); printf("Interrupt : %d\n",COM_IRQ+8); break; case 'f':sscanf(&args[count][2],"%d",&COM_FIFO); switch (COM_FIFO) { case 0:case 1:case 4:case 8:case 14: break; default:status(ST_SHOW,"Invalid FIFO. Valid Values (0,1,4,8,14)."); exit(-1); } printf("FIFO set to: %d\n",COM_FIFO); break; case 'B':sscanf(&args[count][2],"%d",&COM_TEMP); switch (COM_TEMP) { case 5:case 6:case 7:case 8: COM_SET&=CLEAR_BITS; COM_SET|=COM_TEMP-5; break; default:status(ST_SHOW,"Invalid BIT Size. Valid Range 5 - 8."); exit(-1); } printf("Bits per word set to: %d\n",COM_TEMP); break; case 'S':sscanf(&args[count][2],"%d",&COM_TEMP); switch (COM_TEMP) { case 1:case 2: COM_SET&=CLEAR_STOP; COM_SET|=(COM_TEMP-1)<<2; break; default:status(ST_SHOW,"Invalid STOP Count. Valid Range 1 - 2."); exit(-1); } printf("Stop Bits set to: %d\n",COM_TEMP); break; case 'P':COM_TEMP=(int)args[count][2]; switch (COM_TEMP<'a' ? COM_TEMP-'A'+'a' : COM_TEMP) { case 'n': COM_SET&=CLEAR_PARITY; printf("Parity set to: NONE\n"); break; case 'o': COM_SET&=CLEAR_PARITY; COM_SET|=ODD_PARITY; printf("Parity set to: ODD\n"); break; case 'e': COM_SET&=CLEAR_PARITY; COM_SET|=EVEN_PARITY; printf("Parity set to: EVEN\n"); break; case 'm': COM_SET&=CLEAR_PARITY; COM_SET|=MARK_PARITY; printf("Parity set to: MARK\n"); break; case 's': COM_SET&=CLEAR_PARITY; COM_SET|=SPACE_PARITY; printf("Parity set to: SPACE\n"); break; default:status(ST_SHOW,"Invalid PARITY. Valid types:"); status(ST_SHOW," None, Odd, Even, Mark, Stop"); exit(-1); } break; default: status(ST_SHOW,"Bad command line. -? for help."); exit(-1); } } printf("\n"); status(ST_WRITE,"[ Command Line Parsed ]"); status(ST_WRITE,"Base Port : 0x%X",COM_BASE); status(ST_WRITE,"Port IRQ : %d",COM_IRQ); status(ST_WRITE,"Port Interrupt : 0x%X",COM_IRQ+8); status(ST_WRITE,"FIFO Buffer : %d",COM_FIFO); status(ST_WRITE,"Baud Rate : %d",COM_RATE); status(ST_WRITE,"Control Settings : 0x%X",COM_SET); status(ST_WRITE,""); switch(COM_BASE) { case 0x3E8:case 0x3F8:case 0x2E8:case 0x2F8: break; default: status(ST_SHOW,"WARNING: 0x%X unrecognized as standard port base.",COM_BASE); printf("Are you sure you wish to use it? (y/N)\n"); switch (getche()) { case 'Y':case 'y': break; default:printf("\nExiting...\n"); exit(-1); } printf("\n"); while (kbhit()) getch(); } status(ST_SHOW,"[ Initializing Port ]"); Port=ioOpenPort(COM_BASE, COM_IRQ); if(!Port) { status(ST_SHOW,"Error initalizing port.\n"); return 1; } status(ST_WRITE,"Latched Port ID at (struct PortID *)0x%X",Port); status(ST_WRITE,""); ioSetBaud(Port, COM_RATE); ioSetHandShake(Port, DTR | RTS); ioSetControl(Port, COM_SET); ioSetMode(Port, BYTE_MODE); ClearIO(); PrintStr("Initializing Modem . . .\n\r"); WriteStr(Port, "AT&F\r"); while (!Escape) { while (!kbhit() && !ioReadStatus(Port)); if (kbhit()) switch (key=getch()) { case 27: Escape=1; break; case 0:case 0xE0: if (kbhit()) switch (key=getch()) { case 0x12:ECHO=1-ECHO; PrintStr("\n\r[ECHO "); PrintStr(ECHO ? "ON" : "OFF"); PrintStr("]\n\r"); break; case 0x26:LF=1-LF; PrintStr("\n\r[LF "); PrintStr(LF ? "ON" : "OFF"); PrintStr("]\n\r"); break; case 0x17:WriteStr(Port,"AT&F\r"); break; case 0x3B:PrintStr("\n\r[ LCR: Help ]\n\r"); PrintStr("ALT-E Toggle ECHO ON/OFF\n\r"); PrintStr("ALT-I Initialize Modem\n\r"); PrintStr("ALT-L Toggle LineFeeds\n\r"); PrintStr("F1 Help\n\r"); PrintStr("F2 Clear Screen\n\r"); PrintStr("F3 Cool message\n\r"); PrintStr("F4 Dial DeadMan' Hand\n\r"); PrintStr("F5 Dial PSU #1\n\r"); PrintStr("F6 Dial PSU #2\n\r"); PrintStr("ESC Exit\n\r"); break; case 0x3C:ClearIO(); break; case 0x3D:PrintStr("\n\r[LL is "); PrintStr(ECHO ? "cool" : "neato"); PrintStr("]\n\r"); break; case 0x3E:WriteStr(Port, "ATDT9,2889264\r"); break; case 0x3F:WriteStr(Port,"ATDT54206\r"); break; case 0x40:WriteStr(Port,"ATDT53144\r"); break; default: break; } break; default:if (ECHO) PrintIO(key); ioWriteByte(Port, key); break; } if (ioReadStatus(Port)) switch (key=ioReadByte(Port)) { case 27: while (!kbhit() && !ioReadStatus(Port)); if (ioReadByte(Port)) { if (ioReadByte(Port)=='[') { PrintIO('E'); PrintIO('['); } } break; case 13: if (prior!=10) PrintIO(10); PrintIO(prior=13); break; default:PrintIO(key); prior=key; break; } } status(ST_SHOW,"[ Reseting Port ]"); status(ST_WRITE,""); ioClosePort(Port); return 0; }