void chat() { char str1[150],str2[256],ch; int i; aborted=0; if((ch=inkey(0))!=0 || wordwrap[0]) { if(ch=='/') { bputs("\1n\1y\1hCommand: \1n"); ch=getkeys("?LS|%\r",0); switch(ch) { case CR: return; #if DEBUG case '|': debug(); return; #endif case '%': if(!com_port) /* only if local */ exit(0); break; case '?': mnemonics("\r\n~List Players"); mnemonics("\r\n~Send Private Message to Player"); bputs("\r\n"); return; case 'L': listplayers(); bprintf(ShoeStatus,cur_card,total_decks*52); return; case 'S': listplayers(); bputs("\1n\r\n\1y\1hWhich node: \1n"); i=getnum(sys_nodes); getgamedat(0); if(i>0 && i!=node_num && node[i-1]) { bputs("\r\n\1n\1y\1hMessage: "); if(getstr(str1,50,K_LINE)) { sprintf(str2,UserWhispers,user_name ,str1); putnodemsg(str2,i); } } else bputs("\1n\r\n\1r\1hInvalid node.\1n\r\n"); return; } } ungetkey(ch); if(!getstr(str1,50,K_CHAT|K_WRAP)) return; sprintf(str2,UserSays,user_name,str1); putallnodemsg(str2); } getnodemsg(); }
void syncdealer() { char *Dealing="\1n\1hDealing...\r\n\1n"; int i; time_t start,now; status[node_num-1]=SYNC_D; putgamedat(); start=now=time(NULL); // fdelay(1000); /* wait for stragglers to join game v1.02 */ getgamedat(0); while(total_players) { for(i=0;i<total_nodes;i++) if(i!=node_num-1 && node[i] && status[i]!=SYNC_P) break; if(i==total_nodes) /* all player nodes are waiting */ break; chat(); mswait(100); getgamedat(0); if(!node[node_num-1]) { /* current node not in game? */ getgamedat(1); node[node_num-1]=user_number; /* fix it */ putgamedat(); } now=time(NULL); if(now-start>300) { /* only wait upto 5 minutes */ bputs("\r\nsyncdealer: timeout\r\n"); break; } } getgamedat(1); misc|=INPLAY; curplayer=firstplayer(); putgamedat(); getnodemsg(); bputs(Dealing); putallnodemsg(Dealing); getgamedat(1); for(i=0;i<total_nodes;i++) /* release player nodes */ if(node[i]) status[i]=PLAY; putgamedat(); }
void play() { char str[256],str2[256],log[81],done,doub,dh,split_card,suggestion ,*YouWereDealt="\1n\1k\0015 You \1n\1m were dealt: %s\r\n" ,*UserWasDealt="\1n\1m\1h%s\1n\1m was dealt: %s\r\n" ,*YourHand="\1n\1k\0015 You \1n\1m (%2d) %s" ,*UserHand="\1n\1m\1h%-25s \1n\1m(%2d) %s" ,*DealerHand="\1n\1hDealer \1n\1m(%2d) " ,*Bust="\1n\1r\1hBust\1n\r\n" ,*Natural="\1g\1h\1iNatural " ,*Three7s="\1r\1h\1iThree 7's " ,*Blackjack="\1n\0011\1k Blackjack! \1n\r\n" ,*TwentyOne="\1n\0012\1k Twenty-one \1n\r\n"; int h,i,j,file; uint max; long val; time_t start,now; struct tm* tm; sprintf(str,"MESSAGE.%d",node_num); /* remove message if waiting */ if(fexist(str)) remove(str); getgamedat(0); if(node[node_num-1]) { getgamedat(1); node[node_num-1]=0; putgamedat(); getgamedat(0); } if(total_players && misc&INPLAY) { bputs("\r\n\1hWaiting for end of hand (^A to abort)...\1n"); start=now=time(NULL); getgamedat(0); while(total_players && misc&INPLAY) { if((i=inkey(0))!=0) { /* if key was hit */ if(i==1) { /* if ctrl-a */ bputs("\r\n"); return; } } /* return */ mswait(100); getgamedat(0); now=time(NULL); if(now-start>300) { /* only wait up to 5 minutes */ bputs("\r\ntimeout\r\n"); return; } } bputs("\r\n"); } getgamedat(1); node[node_num-1]=user_number; putgamedat(); if(!total_players) shuffle(); else listplayers(); sprintf(str,"\1n\1m\1h%s \1n\1m%s\r\n",user_name,joined()); putallnodemsg(str); while(1) { aborted=0; #if DEBUG debugline("top of loop"); #endif if(autoplay) lncntr=0; bprintf(ShoeStatus,cur_card,total_decks*52); if(cur_card>(total_decks*52)-(total_players*10)-10 && lastplayer()) shuffle(); getgamedat(1); misc&=~INPLAY; status[node_num-1]=BET; node[node_num-1]=user_number; putgamedat(); bprintf("\r\n\1n\1cYou have \1h%s\1n\1ck credits\r\n" ,ultoac(credits/1024L,str)); if(credits<min_bet/1024) { bprintf("\1n\1cMinimum bet: \1h%uk\r\n",min_bet); bputs("\1n\1r\1hCome back when you have more credits.\r\n"); break; } if(credits/1024L>(ulong)max_bet) max=max_bet; else max=credits/1024L; sprintf(str,"\r\nBet amount (in kilobytes) or ~Quit [%u]: " ,ibet<credits/1024L ? ibet : credits/1024L); chat(); mnemonics(str); if(autoplay && keyhit()) autoplay=0; if(autoplay) i=ibet; else i=getnum(max); if(i==-1) /* if user hit ^C or 'Q' */ break; bputs("\r\n"); if(i) /* if user entered a value */ bet[0]=i; else /* if user hit enter */ bet[0]=ibet<credits/1024L ? ibet : credits/1024L; if(bet[0]<min_bet) { bprintf("\1n\1cMinimum bet: \1h%uk\r\n",min_bet); bputs("\1n\1r\1hCome back when you're ready to bet more.\r\n"); break; } ibet=bet[0]; getgamedat(0); /* to get all new arrivals */ sprintf(str,"\1m\1h%s\1n\1m bet \1n\1h%u\1n\1mk\r\n",user_name,bet[0]); putallnodemsg(str); pc[0]=2; /* init player's 1st hand to 2 cards */ for(i=1;i<MAX_HANDS;i++) /* init player's other hands to 0 cards */ pc[i]=0; hands=1; /* init total player's hands to 1 */ getgamedat(1); /* first come first serve to be the */ for(i=0;i<total_nodes;i++) /* dealer in control of sync */ if(node[i] && status[i]==SYNC_D) break; if(i==total_nodes) { #if DEBUG debugline("syncdealer"); #endif syncdealer(); } /* all players meet here */ else { /* first player is current after here */ #if DEBUG debugline("syncplayer"); #endif syncplayer(); } /* game is closed (INPLAY) at this point */ #if DEBUG debugline("waitturn 1"); #endif waitturn(); getnodemsg(); /* Initial deal card #1 */ getcarddat(); player[0][0]=card[cur_card++]; putcarddat(); sprintf(str,YouWereDealt,cardstr(card[cur_card-1])); if(!symbols) strip_symbols(str); bputs(str); sprintf(str,UserWasDealt,user_name,cardstr(card[cur_card-1])); putallnodemsg(str); if(lastplayer()) { getcarddat(); dealer[0]=card[cur_card++]; dc=1; putcarddat(); } nextplayer(); #if DEBUG debugline("waitturn 2"); #endif waitturn(); getnodemsg(); getcarddat(); /* Initial deal card #2 */ player[0][1]=card[cur_card++]; putcarddat(); sprintf(str,YouWereDealt,cardstr(card[cur_card-1])); if(!symbols) strip_symbols(str); bputs(str); sprintf(str,UserWasDealt,user_name,cardstr(card[cur_card-1])); putallnodemsg(str); if(lastplayer()) { getcarddat(); dealer[1]=card[cur_card++]; dc=2; putcarddat(); } nextplayer(); #if DEBUG debugline("waitturn 3"); #endif waitturn(); getnodemsg(); getcarddat(); for(i=0;i<hands;i++) { if(autoplay) lncntr=0; done=doub=0; while(!done && pc[i]<MAX_CARDS && cur_card<total_decks*52) { h=hand(player[i],pc[i]); str[0]=0; for(j=0;j<pc[i];j++) { strcat(str,cardstr(player[i][j])); strcat(str," "); } j=bstrlen(str); while(j++<19) strcat(str," "); if(h>21) { strcat(str,Bust); sprintf(str2,YourHand,h,str); if(!symbols) strip_symbols(str2); bputs(str2); sprintf(str2,UserHand,user_name,h,str); putallnodemsg(str2); break; } if(h==21) { if(pc[i]==2) { /* blackjack */ if(player[i][0].suit==player[i][1].suit) strcat(str,Natural); strcat(str,Blackjack); } else { if(player[i][0].value==7 && player[i][1].value==7 && player[i][2].value==7) strcat(str,Three7s); strcat(str,TwentyOne); } sprintf(str2,YourHand,h,str); if(!symbols) strip_symbols(str2); bputs(str2); sprintf(str2,UserHand,user_name,h,str); putallnodemsg(str2); // fdelay(500); break; } strcat(str,"\r\n"); sprintf(str2,YourHand,h,str); if(!symbols) strip_symbols(str2); bputs(str2); sprintf(str2,UserHand,user_name,h,str); putallnodemsg(str2); if(doub) break; sprintf(str,"\1n\1hDealer\1n\1m card up: %s\r\n" ,cardstr(dealer[1])); if(!symbols) strip_symbols(str); bputs(str); if(tutor) { if(pc[i]==2) split_card=pair(player[i],pc[i]); else split_card=0; if(split_card==A || (split_card==9 && (dealer[1].value<7 || (dealer[1].value>7 && dealer[1].value<10))) || split_card==8 || (split_card==7 && dealer[1].value<9) || (split_card==6 && dealer[1].value<7) || (split_card==4 && dealer[1].value==5) || (split_card && split_card<4 && dealer[1].value<8)) suggestion='P'; else if(soft(player[i],pc[i])) { if(h>18) suggestion='S'; else if(pc[i]==2 && ((h==18 && dealer[1].value>3 && dealer[1].value<7) || (h==17 && dealer[1].value>2 && dealer[1].value<7) || (h>13 && dealer[1].value>3 && dealer[1].value<7) || (h==12 && dealer[1].value>4 && dealer[1].value<7))) suggestion='D'; else suggestion='H'; } else { /* hard */ if(h>16 || (h>13 && dealer[1].value<7) || (h==12 && dealer[1].value>3 && dealer[1].value<7)) suggestion='S'; else if(pc[i]==2 && (h==11 || (h==10 && dealer[1].value<10) || (h==9 && dealer[1].value<7))) suggestion='D'; else suggestion='H'; } } if(tutor==1) suggest(suggestion); strcpy(str,"\r\n~Hit"); strcpy(tmp,"H\r"); if(bet[i]+ibet<=credits/1024L && pc[i]==2) { strcat(str,", ~Double"); strcat(tmp,"D"); } if(bet[i]+ibet<=credits/1024L && pc[i]==2 && hands<MAX_HANDS && player[i][0].value==player[i][1].value) { strcat(str,", ~Split"); strcat(tmp,"S"); } strcat(str,", or [Stand]: "); chat(); mnemonics(str); if(autoplay && keyhit()) autoplay=0; if(autoplay) { lncntr=0; bputs("\r\n"); strcpy(str,stand()); bputs(str); putallnodemsg(str); done=1; } else switch(getkeys(tmp,0)) { case 'H': /* hit */ if(tutor==2 && suggestion!='H') wrong(suggestion); strcpy(str,hit()); bputs(str); putallnodemsg(str); getcarddat(); player[i][pc[i]++]=card[cur_card++]; putcarddat(); break; case 'D': /* double down */ if(tutor==2 && suggestion!='D') wrong(suggestion); strcpy(str,doubit()); bputs(str); putallnodemsg(str); getcarddat(); player[i][pc[i]++]=card[cur_card++]; putcarddat(); doub=1; bet[i]+=ibet; break; case 'S': /* split */ if(tutor==2 && suggestion!='P') wrong(suggestion); strcpy(str,split()); bputs(str); putallnodemsg(str); player[hands][0]=player[i][1]; getcarddat(); player[i][1]=card[cur_card++]; player[hands][1]=card[cur_card++]; putcarddat(); pc[hands]=2; bet[hands]=ibet; hands++; break; case CR: if(tutor==2 && suggestion!='S') wrong(suggestion); strcpy(str,stand()); bputs(str); putallnodemsg(str); done=1; break; } } } if(lastplayer()) { /* last player plays the dealer's hand */ getcarddat(); while(hand(dealer,dc)<17 && dc<MAX_CARDS && cur_card<total_decks*52) dealer[dc++]=card[cur_card++]; putcarddat(); } nextplayer(); #if DEBUG debugline("waitturn 4"); #endif waitturn(); getnodemsg(); if(firstplayer()==node_num) { strcpy(str,"\1n\0014\1h Final \1n\r\n"); bputs(str); putallnodemsg(str); } getcarddat(); dh=hand(dealer,dc); /* display dealer's hand */ sprintf(str,DealerHand,dh); for(i=0;i<dc;i++) { strcat(str,cardstr(dealer[i])); strcat(str," "); } i=bstrlen(str); while(i++<50) /* was 50 */ strcat(str," "); if(dh>21) { strcat(str,Bust); if(!symbols) strip_symbols(str); bputs(str); } else if(dh==21) { if(dc==2) { /* blackjack */ if(dealer[0].suit==dealer[1].suit) strcat(str,Natural); strcat(str,Blackjack); } else { /* twenty-one */ if(dc==3 && dealer[0].value==7 && dealer[1].value==7 && dealer[2].value==7) strcat(str,Three7s); strcat(str,TwentyOne); } if(!symbols) strip_symbols(str); bputs(str); } else { if(!symbols) strip_symbols(str); bprintf("%s\r\n",str); } for(i=0;i<hands;i++) { /* display player's hand(s) */ h=hand(player[i],pc[i]); str[0]=0; for(j=0;j<pc[i];j++) { strcat(str,cardstr(player[i][j])); strcat(str," "); } j=bstrlen(str); while(j++<19) strcat(str," "); if(logit) { now=time(NULL); tm=localtime(&now); sprintf(log,"%02d%02d%02d.log" /* log winnings */ ,tm->tm_mon+1,tm->tm_mday,tm->tm_year%100); if((file=nopen(log,O_RDONLY))!=-1) { read(file,tmp,filelength(file)); tmp[filelength(file)]=0; val=atol(tmp); close(file); } else val=0L; if((file=nopen(log,O_WRONLY|O_CREAT|O_TRUNC))==-1) { bprintf("error opening %s\r\n",log); return; } } if(h<22 && (h>dh || dh>21 /* player won */ || (h==21 && pc[i]==2 && dh==21 && dh>2))) { /* blackjack */ j=bet[i]; /* and dealer got 21 */ if(h==21 && /* natural blackjack or three 7's */ ((player[i][0].value==7 && player[i][1].value==7 && player[i][2].value==7) || (pc[i]==2 && player[i][0].suit==player[i][1].suit))) j*=2; else if(h==21 && pc[i]==2) /* regular blackjack */ j*=1.5; /* blackjack pays 1 1/2 to 1 */ sprintf(tmp,"\1n\1h\1m\1iWon!\1n\1h %u\1n\1mk",j); strcat(str,tmp); credits+=j*1024L; val-=j*1024L; moduserdat(); } else if(h<22 && h==dh) strcat(str,"\1n\1hPush"); else { strcat(str,"\1nLost"); credits-=bet[i]*1024L; val+=bet[i]*1024L; moduserdat(); } if(logit) { sprintf(tmp,"%ld",val); write(file,tmp,strlen(tmp)); close(file); } /* close winning log */ strcat(str,"\1n\r\n"); sprintf(str2,YourHand,h,str); if(!symbols) strip_symbols(str2); bputs(str2); sprintf(str2,UserHand,user_name,h,str); putallnodemsg(str2); } nextplayer(); if(!lastplayer()) { #if DEBUG debugline("lastplayer waitturn"); #endif waitturn(); nextplayer(); } #if DEBUG debugline("end of loop"); #endif getnodemsg(); } getgamedat(1); node[node_num-1]=0; putgamedat(); sprintf(str,"\1n\1m\1h%s \1n\1m%s\r\n",user_name,left()); putallnodemsg(str); }
void TERMWINDOWMEMBER shownode(const NodesCitC *nd, ModemConsoleE W) { assert (nd); if (!read_node_ddata()) { wPrintf(W, getmsg(59)); return; } const char **nettypes = (const char **) nddd->next->aux; const char **nodemsgs = (const char **) nddd->next->next->aux; wPrintf(W, getnodemsg(14), nd->GetName()); wDoCR(W); wPrintf(W, getnodemsg(15), nd->GetOldRegion()); wDoCR(W); wPrintf(W, getnodemsg(16), nd->GetAlias(), nd->GetLocID()); wDoCR(W); #ifdef WINCIT wPrintf(W, "IpAddress: %s", nd->GetIpAddress()); wDoCR(W); wPrintf(W, "IpPort: %d", nd->GetIpPort()); wDoCR(W); #endif wPrintf(W, getnodemsg(17), nd->GetPreDial()); wDoCR(W); wPrintf(W, getnodemsg(18), nd->GetDialOut()); wDoCR(W); wPrintf(W, getnodemsg(19), bauds[nd->GetBaud()]); wDoCR(W); wPrintf(W, getnodemsg(20), nd->GetLoginMacro()); wDoCR(W); wPrintf(W, getnodemsg(21), nd->GetDialTimeout()); wDoCR(W); wPrintf(W, getnodemsg(22), nd->GetProtocol()); wDoCR(W); wPrintf(W, getnodemsg(23), nd->GetWaitTimeout()); wDoCR(W); wPrintf(W, getnodemsg(24), nd->GetMailFileName()); wDoCR(W); label Buffer; wPrintf(W, getnodemsg(25), nd->GetAutoHall() > 0 ? HallData[nd->GetAutoHall()].GetName(Buffer, sizeof(Buffer)) : getnodemsg(28)); wDoCR(W); wPrintf(W, getnodemsg(26), nd->GetAutoGroup() > 0 ? GroupData[nd->GetAutoGroup()].GetName(Buffer, sizeof(Buffer)) : getnodemsg(28)); wDoCR(W); wPrintf(W, getnodemsg(27), GroupData[nd->GetMapUnknownGroup()].GetName(Buffer, sizeof(Buffer))); wDoCR(W); wPrintf(W, getnodemsg(29), nettypes[nd->GetNetworkType()], nd->GetNetworkRevisionNumber() ? nd->GetNetworkRevisionNumber() + '@' : ' '); wDoCR(W); wPrintf(W, getnodemsg(30), nd->GetCreatePacket()); wDoCR(W); wPrintf(W, getnodemsg(31), nd->GetExtractPacket()); wDoCR(W); wPrintf(W, getnodemsg(32), nd->IsAutoRoom()); wDoCR(W); wPrintf(W, getnodemsg(33), nd->GetRequest()); wDoCR(W); wPrintf(W, getnodemsg(34), nd->IsGateway()); wDoCR(W); wPrintf(W, getnodemsg(35), nd->GetFetch()); wDoCR(W); wPrintf(W, getnodemsg(36), nd->GetNetFail()); wDoCR(W); wPrintf(W, getnodemsg(37), nd->GetRedial()); wDoCR(W); wPrintf(W, getnodemsg(38), nd->GetOutputPace()); wDoCR(W); dump_node_ddata(); }
Bool ReadNodesCit(NodesCitC **newNode, const char *NameOrAddrToFind, ModemConsoleE W, Bool option) #endif { FILE *fBuf; char *words[256]; int i; char path[80]; int count; uint lineno = 0; l_slot logslot; if (!read_node_ddata()) { TWwPrintf(W, getmsg(59)); return (FALSE); } const char **nodekeywords = (const char **) nddd->aux; const char **nettypes = (const char **) nddd->next->aux; const char **nodemsgs = (const char **) nddd->next->next->aux; label NameToFind; CopyStringToBuffer(NameToFind, NameOrAddrToFind); if (SameString(NameOrAddrToFind, getnodemsg(2))) { // if default, start fresh if (!clearNode(newNode)) { dump_node_ddata(); return (FALSE); } } else { // else first read in default #ifdef WINCIT ReadNodesCit(TW, newNode, getnodemsg(2), W, FALSE); #else ReadNodesCit(newNode, getnodemsg(2), W, FALSE); #endif if (*newNode) { #ifdef WINCIT logslot = nodexists(NameOrAddrToFind, TW ? TW->LogOrder : NULL); #else logslot = nodexists(NameOrAddrToFind); #endif if (logslot == CERROR) { TWwDoCR(W); TWwPrintf(W, getnodemsg(3), NameOrAddrToFind); if (strlen(NameOrAddrToFind) < 4) { char temp[4]; CopyStringToBuffer(temp, NameOrAddrToFind); strlwr(temp); TWwPrintf(W, getnodemsg(4), temp, cfg.locID); } dump_node_ddata(); return (FALSE); } label Alias, LocID; #ifdef WINCIT if (!*LogTab[TW ? TW->LogOrder[logslot] : logslot].GetAlias(Alias, sizeof(Alias)) || !*LogTab[TW ? TW->LogOrder[logslot] : logslot].GetLocID(LocID, sizeof(LocID))) #else if (!*LTab(logslot).GetAlias(Alias, sizeof(Alias)) || !*LTab(logslot).GetLocID(LocID, sizeof(LocID))) #endif { TWwDoCR(W); TWwPrintf(W, getnodemsg(5), NameOrAddrToFind); dump_node_ddata(); return (FALSE); } (*newNode)->SetAlias(Alias); (*newNode)->SetLocID(LocID); label FileName; sprintf(FileName, getnodemsg(6), (*newNode)->GetAlias()); (*newNode)->SetMailFileName(FileName); // Make sure NameToFind is a name, not address. #ifdef WINCIT LogTab[TW ? TW->LogOrder[logslot] : logslot].GetName(NameToFind, sizeof(NameToFind)); #else LTab(logslot).GetName(NameToFind, sizeof(NameToFind)); #endif // Support for optional nodes.cit entries. (*newNode)->SetName(NameToFind); } } if (!*newNode) { cOutOfMemory(44); dump_node_ddata(); return (FALSE); } compactMemory(); sprintf(path, sbs, cfg.homepath, getnodemsg(8)); if ((fBuf = fopen(path, FO_R)) == NULL) // ASCII mode { TWdoccr(); TWcPrintf(getmsg(15), getnodemsg(8)); TWdoccr(); dump_node_ddata(); return (option); } char line[256]; Bool FoundOurEntry = FALSE; long pos = ftell(fBuf); while (fgets(line, 254, fBuf) != NULL) { lineno++; if (line[0] != '#') { pos = ftell(fBuf); continue; } // Don't read anything until we found our entry, except possible beginnings of our entry. (#NODE...) if (!FoundOurEntry && strnicmp(line + 1, nodekeywords[NOK_NODE], strlen(nodekeywords[NOK_NODE])) != SAMESTRING) { pos = ftell(fBuf); continue; } // Save a copy of the line in case this is the #LOGIN macro: parse_it // changes what is passed to it. char ltmp[256]; CopyStringToBuffer(ltmp, line); count = parse_it(words, line); // Look up our first word in table of keywords. for (i = 0; i < NOK_NUM; i++) { if (SameString(words[0] + 1, nodekeywords[i])) { //^ add one for '#' break; } } if (i < NOK_NUM && !words[1][0]) // valid keywords need a param { TWcPrintf(getnodemsg(9), getnodemsg(8), ltoac(lineno), nodekeywords[i], ns); TWdoccr(); continue; } if (i == NOK_NODE) { // This is a #NODE line... if we have alread found our entry, // then this is the start of the next one, and we are done. if (FoundOurEntry) { fclose(fBuf); dump_node_ddata(); return (TRUE); } // This is a #NODE line... if it is for us, then we have now // found our entry. If not, then we continue looking. if (SameString(NameToFind, words[1])) { FoundOurEntry = TRUE; } else { pos = ftell(fBuf); continue; } } switch (i) { case NOK_BAUD: { PortSpeedE PS = digitbaud(atol(words[1])); if (PS == PS_ERROR) { TWcPrintf(getnodemsg(9), getnodemsg(8), ltoac(lineno), nodekeywords[i], words[1]); TWdoccr(); } else { (*newNode)->SetBaud(PS); } break; } case NOK_DIALOUT: case NOK_PHONE: { (*newNode)->SetDialOut(words[1]); if (strlen(words[1]) > 49) { TWcPrintf(getnodemsg(1), getnodemsg(8), ltoac(lineno), nodekeywords[i], 50); TWdoccr(); } break; } case NOK_PREDIAL: { (*newNode)->SetPreDial(words[1]); if (strlen(words[1]) > 63) { TWcPrintf(getnodemsg(1), getnodemsg(8), ltoac(lineno), nodekeywords[i], 64); TWdoccr(); } break; } case NOK_FETCH_TIMEOUT: { (*newNode)->SetFetchTimeout(atoi(words[1])); break; } case NOK_ZIP: { if (!words[2][0]) // need second param { TWcPrintf(getnodemsg(9), getnodemsg(8), ltoac(lineno), nodekeywords[i], ns); TWdoccr(); continue; } else { (*newNode)->SetCreatePacket(words[1]); if (strlen(words[1]) > 39) { TWcPrintf(getnodemsg(1), getnodemsg(8), ltoac(lineno), nodekeywords[i], 40); TWdoccr(); } (*newNode)->SetExtractPacket(words[2]); if (strlen(words[2]) > 39) { TWcPrintf(getnodemsg(1), getnodemsg(8), ltoac(lineno), nodekeywords[i], 40); TWdoccr(); } } break; } case NOK_NETWORK: { (*newNode)->SetNetworkRevisionNumber(0); NETTYPES j; for (j = (NETTYPES) 0; j < NET_NUM; j = (NETTYPES) (j + 1)) { if (SameString(words[1], nettypes[j])) { break; } } if (j == NET_DCIT11) { j = NET_DCIT10; } if (j == NET_6_9a) { (*newNode)->SetNetworkRevisionNumber(1); j = NET_6_9; } if (j == NET_NUM) { TWcPrintf(getnodemsg(9), getnodemsg(8), ltoac(lineno), nodekeywords[i], words[1]); TWdoccr(); } else { (*newNode)->SetNetworkType(j); } break; } case NOK_PROTOCOL: { (*newNode)->SetProtocol(words[1][0]); break; } case NOK_AUTOHALL: { (*newNode)->SetAutoHall(hallexists(words[1])); if (strlen(words[1]) > LABELSIZE) { TWcPrintf(getnodemsg(1), getnodemsg(8), ltoac(lineno), nodekeywords[i], LABELSIZE + 1); TWdoccr(); } break; } case NOK_AUTOGROUP: { (*newNode)->SetAutoGroup(FindGroupByName(words[1])); if (strlen(words[1]) > LABELSIZE) { TWcPrintf(getnodemsg(1), getnodemsg(8), ltoac(lineno), nodekeywords[i], LABELSIZE + 1); TWdoccr(); } break; } case NOK_MAPUNKGROUP: { g_slot GroupSlot = FindGroupByName(words[1]); if (GroupSlot == CERROR) { GroupSlot = SPECIALSECURITY; } (*newNode)->SetMapUnknownGroup(GroupSlot); if (strlen(words[1]) > LABELSIZE) { TWcPrintf(getnodemsg(1), getnodemsg(8), ltoac(lineno), nodekeywords[i], LABELSIZE + 1); TWdoccr(); } break; } case NOK_LOGIN: { (*newNode)->SetLoginMacro(ltmp + strlen(nodekeywords[NOK_LOGIN]) + 1); break; } case NOK_NODE: { // A bit silly. (*newNode)->SetName(words[1]); if (strlen(words[1]) > LABELSIZE) { TWcPrintf(getnodemsg(1), getnodemsg(8), ltoac(lineno), nodekeywords[i], LABELSIZE + 1); TWdoccr(); } if (count > 2) { (*newNode)->SetOldRegion(words[2]); if (strlen(words[2]) > LABELSIZE) { TWcPrintf(getnodemsg(1), getnodemsg(8), ltoac(lineno), nodekeywords[i], LABELSIZE + 1); TWdoccr(); } } else { (*newNode)->SetOldRegion(ns); } (*newNode)->FreeMappedGroups(); (*newNode)->SetRoomOffset(0); break; } case NOK_DIAL_TIMEOUT: { (*newNode)->SetDialTimeout(atoi(words[1])); break; } case NOK_REQUEST: { (*newNode)->SetRequest(atoi(words[1])); break; } case NOK_WAIT_TIMEOUT: { (*newNode)->SetWaitTimeout(atoi(words[1])); break; } case NOK_AUTOROOM: { (*newNode)->SetAutoRoom(atoi(words[1])); break; } case NOK_VERBOSE: { (*newNode)->SetDefaultVerbose(); const char **verbosekeywords = (const char **) nddd->next->next->next->aux; for (int j = 1; j < count; j++) { if (SameString(words[j], getnodemsg(39))) { (*newNode)->SetDefaultVerbose(); } else if (SameString(words[j], getnodemsg(40))) { (*newNode)->SetDefaultVerbose(); (*newNode)->SetVerbose(NCV_FILE69INFULL, TRUE); (*newNode)->SetVerbose(NCV_NOACCESS, TRUE); } else if (SameString(words[j], getnodemsg(41))) { (*newNode)->SetDefaultVerbose(); (*newNode)->SetVerbose(NCV_FILE69INFULL, TRUE); (*newNode)->SetVerbose(NCV_NOACCESS, TRUE); (*newNode)->SetVerbose(NCV_ROOMCREATED, TRUE); (*newNode)->SetVerbose(NCV_ROOMNOTCREATED, TRUE); (*newNode)->SetVerbose(NCV_NETIDNOTFOUND, TRUE); (*newNode)->SetVerbose(NCV_NONETIDONSYSTEM, TRUE); } else { const char *Keyword; Bool NewSetting; if (words[j][0] == '!') { Keyword = words[j] + 1; NewSetting = FALSE; } else { Keyword = words[j]; NewSetting = TRUE; } NCV_Type TestType; for (TestType = (NCV_Type) 0; TestType < NCV_MAX; TestType = (NCV_Type) (TestType + 1)) { if (SameString(Keyword, verbosekeywords[TestType])) { (*newNode)->SetVerbose(TestType, NewSetting); break; } } if (TestType == NCV_MAX) { if (SameString(Keyword, getnodemsg(13))) { // ALL for (TestType = (NCV_Type) 0; TestType < NCV_MAX; TestType = (NCV_Type) (TestType + 1)) { (*newNode)->SetVerbose(TestType, NewSetting); } } else { TWcPrintf(getnodemsg(12), getnodemsg(8), ltoac(lineno), words[0], Keyword); TWdoccr(); } } } } break; } case NOK_CHAT: { (*newNode)->SetDefaultChat(); const char **chatkeywords = (const char **) nddd->next->next->next->next->aux; for (int j = 1; j < count; j++) { const char *Keyword; Bool NewSetting; if (words[j][0] == '!') { Keyword = words[j] + 1; NewSetting = FALSE; } else { Keyword = words[j]; NewSetting = TRUE; } NCC_Type TestType; for (TestType = (NCC_Type) 0; TestType < NCC_MAX; TestType = (NCC_Type) (TestType + 1)) { if (SameString(Keyword, chatkeywords[TestType])) { (*newNode)->SetChat(TestType, NewSetting); break; } } if (TestType == NCV_MAX) { if (SameString(Keyword, getnodemsg(13))) { // ALL for (TestType = (NCC_Type) 0; TestType < NCC_MAX; TestType = (NCC_Type) (TestType + 1)) { (*newNode)->SetChat(TestType, NewSetting); } } else { TWcPrintf(getnodemsg(12), getnodemsg(8), ltoac(lineno), words[0], Keyword); TWdoccr(); } } } break; } case NOK_REDIAL: { (*newNode)->SetRedial(atoi(words[1])); break; } case NOK_ROOM: { (*newNode)->SetRoomOffset(pos); fclose(fBuf); dump_node_ddata(); return (TRUE); } case NOK_GROUP: { if (!(*newNode)->AddMappedGroups(words[1], words[2])) { TWcPrintf(getnodemsg(10), words[1]); TWdoccr(); } if (strlen(words[1]) > LABELSIZE) { TWcPrintf(getnodemsg(1), getnodemsg(8), ltoac(lineno), nodekeywords[i], LABELSIZE + 1); TWdoccr(); } if (strlen(words[2]) > LABELSIZE) { TWcPrintf(getnodemsg(1), getnodemsg(8), ltoac(lineno), nodekeywords[i], LABELSIZE + 1); TWdoccr(); } break; } case NOK_GATEWAY: { (*newNode)->SetGateway(atoi(words[1])); break; } case NOK_FETCH: { (*newNode)->SetFetch(atoi(words[1])); break; } case NOK_NETFAIL: { (*newNode)->SetNetFail(atoi(words[1])); break; } case NOK_OUTPUTPACE: { (*newNode)->SetOutputPace(atoi(words[1])); break; } case NOK_IPADDRESS: { #ifdef WINCIT (*newNode)->SetIpAddress(words[1]); if (strlen(words[1]) > 255) { TWcPrintf(getnodemsg(1), getnodemsg(8), ltoac(lineno), nodekeywords[i], 256); TWdoccr(); } #endif break; } case NOK_IPPORT: { #ifdef WINCIT (*newNode)->SetIpPort(atoi(words[1])); #endif break; } default: { TWcPrintf(getnodemsg(11), getnodemsg(8), ltoac(lineno), words[0]); TWdoccr(); break; } } pos = ftell(fBuf); } fclose(fBuf); if (!FoundOurEntry && !option && debug) { TWwDoCR(W); TWwPrintf(W, getmsg(206), NameOrAddrToFind); TWwDoCR(W); } dump_node_ddata(); if (option) { return (TRUE); } else { return (FoundOurEntry); } }