|
|
1.1 ! root 1: #line 1 "GETNODE.C" ! 2: ! 3: /* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */ ! 4: ! 5: #include "sbbs.h" ! 6: #include "cmdshell.h" ! 7: ! 8: /****************************************************************************/ ! 9: /* Reads the data for node number 'number' into the structure 'node' */ ! 10: /* from NODE.DAB */ ! 11: /* if lockit is non-zero, locks this node's record. putnodedat() unlocks it */ ! 12: /****************************************************************************/ ! 13: void getnodedat(uint number, node_t *node, char lockit) ! 14: { ! 15: char str[256]; ! 16: int count=0; ! 17: ! 18: if(!(sys_status&SS_NODEDAB)) ! 19: return; ! 20: if(!number || number>sys_nodes) { ! 21: errormsg(WHERE,ERR_CHK,"node number",number); ! 22: return; } ! 23: number--; /* make zero based */ ! 24: while(count<LOOP_NODEDAB) { ! 25: if(count>10) ! 26: mswait(55); ! 27: lseek(nodefile,(long)number*sizeof(node_t),SEEK_SET); ! 28: if(lockit ! 29: && lock(nodefile,(long)number*sizeof(node_t),sizeof(node_t))==-1) { ! 30: count++; ! 31: continue; } ! 32: if(read(nodefile,node,sizeof(node_t))==sizeof(node_t)) ! 33: break; ! 34: count++; } ! 35: if(count>(LOOP_NODEDAB/2) && count!=LOOP_NODEDAB) { ! 36: sprintf(str,"NODE.DAB COLLISION - Count: %d",count); ! 37: logline("!!",str); } ! 38: if(count==LOOP_NODEDAB) { ! 39: errormsg(WHERE,ERR_READ,"NODE.DAB",number+1); ! 40: return; } ! 41: } ! 42: ! 43: /****************************************************************************/ ! 44: /* Synchronizes all the nodes knowledge of the other nodes' actions, mode, */ ! 45: /* status and other flags. */ ! 46: /* Assumes that getnodedat(node_num,&thisnode,0) was called right before it */ ! 47: /* is called. */ ! 48: /****************************************************************************/ ! 49: void nodesync() ! 50: { ! 51: static user_t user; ! 52: static int inside; ! 53: char str[256],today[32]; ! 54: int i,j,atr=curatr; /* was lclatr(-1) 01/29/96 */ ! 55: node_t node; ! 56: ! 57: if(inside) return; ! 58: inside=1; ! 59: ! 60: if(thisnode.action!=action) { ! 61: getnodedat(node_num,&thisnode,1); ! 62: thisnode.action=action; ! 63: putnodedat(node_num,thisnode); } ! 64: ! 65: criterrs=thisnode.errors; ! 66: ! 67: if(sys_status&SS_USERON) { ! 68: if(!(sys_status&SS_NEWDAY)) { ! 69: now=time(NULL); ! 70: unixtodstr(logontime,str); ! 71: unixtodstr(now,today); ! 72: if(strcmp(str,today)) { /* New day, clear "today" user vars */ ! 73: sys_status|=SS_NEWDAY; // So we don't keep doing this over&over ! 74: putuserrec(useron.number,U_ETODAY,5,"0"); ! 75: putuserrec(useron.number,U_PTODAY,5,"0"); ! 76: putuserrec(useron.number,U_TTODAY,5,"0"); ! 77: putuserrec(useron.number,U_LTODAY,5,"0"); ! 78: putuserrec(useron.number,U_TEXTRA,5,"0"); ! 79: putuserrec(useron.number,U_FREECDT,10 ! 80: ,ultoa(level_freecdtperday[useron.level],str,10)); ! 81: getuserdat(&useron); } } ! 82: if(thisnode.misc&NODE_UDAT && !(useron.rest&FLAG('G'))) { /* not guest */ ! 83: getuserdat(&useron); ! 84: getnodedat(node_num,&thisnode,1); ! 85: thisnode.misc&=~NODE_UDAT; ! 86: putnodedat(node_num,thisnode); } ! 87: if(thisnode.misc&NODE_MSGW) ! 88: getsmsg(useron.number); /* getsmsg clears MSGW flag */ ! 89: if(thisnode.misc&NODE_NMSG) ! 90: getnmsg(); } /* getnmsg clears NMSG flag */ ! 91: ! 92: if(sync_mod[0]) ! 93: exec_bin(sync_mod,&main_csi); ! 94: ! 95: if(thisnode.misc&NODE_INTR) { ! 96: bputs(text[NodeLocked]); ! 97: logline(nulstr,"Interrupted"); ! 98: hangup(); ! 99: inside=0; ! 100: return; } ! 101: ! 102: if(sys_status&SS_USERON && memcmp(&user,&useron,sizeof(user_t))) { ! 103: // lputc(7); ! 104: getusrdirs(); ! 105: getusrsubs(); ! 106: user=useron; } ! 107: ! 108: if(sys_status&SS_USERON && online && (timeleft/60)<(5-timeleft_warn) ! 109: && !SYSOP) { ! 110: timeleft_warn=5-(timeleft/60); ! 111: attr(LIGHTGRAY); ! 112: bprintf(text[OnlyXminutesLeft] ! 113: ,((ushort)timeleft/60)+1,(timeleft/60) ? "s" : nulstr); } ! 114: ! 115: attr(atr); /* replace original attributes */ ! 116: inside=0; ! 117: } ! 118: ! 119: /****************************************************************************/ ! 120: /* Prints short messages waiting for this node, if any... */ ! 121: /****************************************************************************/ ! 122: void getnmsg() ! 123: { ! 124: char str[256], HUGE16 *buf; ! 125: int file; ! 126: long length; ! 127: ! 128: getnodedat(node_num,&thisnode,1); ! 129: thisnode.misc&=~NODE_NMSG; /* clear the NMSG flag */ ! 130: putnodedat(node_num,thisnode); ! 131: ! 132: #if 0 ! 133: /* Only for v1b rev 2-5 and XSDK v2.1x compatibility */ ! 134: sprintf(str,"%sMSGS\\N%3.3u.IXB",data_dir,node_num); ! 135: if((ixb=nopen(str,O_RDONLY))!=-1) { ! 136: read(ixb,&offset,4); ! 137: chsize(ixb,0L); ! 138: close(ixb); ! 139: remove(str); } ! 140: #endif ! 141: ! 142: sprintf(str,"%sMSGS\\N%3.3u.MSG",data_dir,node_num); ! 143: if(flength(str)<1L) ! 144: return; ! 145: if((file=nopen(str,O_RDWR))==-1) { ! 146: /** ! 147: errormsg(WHERE,ERR_OPEN,str,O_RDWR); ! 148: **/ ! 149: return; } ! 150: length=filelength(file); ! 151: if(!length) { ! 152: close(file); ! 153: return; } ! 154: if((buf=LMALLOC(length+1))==NULL) { ! 155: close(file); ! 156: errormsg(WHERE,ERR_ALLOC,str,length+1); ! 157: return; } ! 158: if(lread(file,buf,length)!=length) { ! 159: close(file); ! 160: FREE(buf); ! 161: errormsg(WHERE,ERR_READ,str,length); ! 162: return; } ! 163: chsize(file,0L); ! 164: close(file); ! 165: buf[length]=0; ! 166: ! 167: if(thisnode.action==NODE_MAIN || thisnode.action==NODE_XFER ! 168: || sys_status&SS_IN_CTRLP) { ! 169: CRLF; } ! 170: putmsg(buf,P_NOATCODES); ! 171: LFREE(buf); ! 172: } ! 173: ! 174: /****************************************************************************/ ! 175: /* 'ext' must be at least 128 bytes! */ ! 176: /****************************************************************************/ ! 177: void getnodeext(uint number, char *ext) ! 178: { ! 179: char str[256]; ! 180: int count=0; ! 181: ! 182: if(!(sys_status&SS_NODEDAB)) ! 183: return; ! 184: if(!number || number>sys_nodes) { ! 185: errormsg(WHERE,ERR_CHK,"node number",number); ! 186: return; } ! 187: number--; /* make zero based */ ! 188: while(count<LOOP_NODEDAB) { ! 189: if(count>10) ! 190: mswait(55); ! 191: if(lock(node_ext,(long)number*128L,128)==-1) { ! 192: count++; ! 193: continue; } ! 194: lseek(node_ext,(long)number*128L,SEEK_SET); ! 195: if(read(node_ext,ext,128)==128) ! 196: break; ! 197: count++; } ! 198: unlock(node_ext,(long)number*128L,128); ! 199: if(count>(LOOP_NODEDAB/2) && count!=LOOP_NODEDAB) { ! 200: sprintf(str,"NODE.EXB COLLISION - Count: %d",count); ! 201: logline("!!",str); } ! 202: if(count==LOOP_NODEDAB) { ! 203: errormsg(WHERE,ERR_READ,"NODE.EXB",number+1); ! 204: return; } ! 205: } ! 206: ! 207: ! 208: /****************************************************************************/ ! 209: /* Prints short messages waiting for 'usernumber', if any... */ ! 210: /* then deletes them. */ ! 211: /****************************************************************************/ ! 212: void getsmsg(int usernumber) ! 213: { ! 214: char str[256], HUGE16 *buf; ! 215: int file; ! 216: long length; ! 217: ! 218: sprintf(str,"%sMSGS\\%4.4u.MSG",data_dir,usernumber); ! 219: if(flength(str)<1L) ! 220: return; ! 221: if((file=nopen(str,O_RDWR))==-1) { ! 222: errormsg(WHERE,ERR_OPEN,str,O_RDWR); ! 223: return; } ! 224: length=filelength(file); ! 225: if((buf=LMALLOC(length+1))==NULL) { ! 226: close(file); ! 227: errormsg(WHERE,ERR_ALLOC,str,length+1); ! 228: return; } ! 229: if(lread(file,buf,length)!=length) { ! 230: close(file); ! 231: FREE(buf); ! 232: errormsg(WHERE,ERR_READ,str,length); ! 233: return; } ! 234: chsize(file,0L); ! 235: close(file); ! 236: buf[length]=0; ! 237: getnodedat(node_num,&thisnode,0); ! 238: if(thisnode.action==NODE_MAIN || thisnode.action==NODE_XFER ! 239: || sys_status&SS_IN_CTRLP) { ! 240: CRLF; } ! 241: if(thisnode.misc&NODE_MSGW) { ! 242: getnodedat(node_num,&thisnode,1); ! 243: thisnode.misc&=~NODE_MSGW; ! 244: putnodedat(node_num,thisnode); } ! 245: putmsg(buf,P_NOATCODES); ! 246: LFREE(buf); ! 247: } ! 248:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.