/* bbsc2.c    */

#include "bbsc12.h"

int             contin;
extern int      zip;

editline(line_no, tflag)
	int             line_no;
	char            tflag;
{
	char           *work_ptr,	/* pointers */
	               *msg_ptr, *new_ptr, tmp_tmp[3], byte;
	int             i;	/* a counter */

	work_msg[0] = '\0';	/* init strings */
	buf128[0] = '\0';
	strcpy(tmp_tmp, " ");
	i = 1;			/* assume at line one */

	work_ptr = work_msg;	/* put the addr of work_msg in the pointer */
	msg_ptr = msg_text;	/* put the addr of the global message in ptr */
	new_ptr = buf128;	/* the new line too */

	while (byte = *msg_ptr) {	/* if at the line then found it's
					 * start */
		if (line_no == i)
			break;	/* found the line        */
		while (byte = *msg_ptr++) {	/* move msg to work area *//* u
						 * ntil end of msg */
			*work_ptr++ = byte;
			if (byte == '\n') {	/* end of line? */
				i++;
				break;	/* then stop moving */
			}
		}
	}
	if (byte == 0) {	/* if true then there ain't no such beast */
		portsout("Hmmm, can't seem to find that line");
		portsout(CRLF);
		portsout("   give me another chance, ok?");
		portsout(CRLF);
		return;		/* here we go round the mulberry bush */
	}

	portsout(CRLF);
	portsout("Line to ");
	if (tflag == 'E') {
		portsout("edit");
	} else if (tflag == 'I') {
		portsout("insert after");
	} else if (tflag == 'D') {
		portsout("delete");
	} else if (tflag == 'R') {
		portsout("replace");
	} else if (tflag == 'N') {
		portsout("center");
	} else if (tflag == 'B') {
		portsout("block");
	} else
		return;

	portsout(" is:");
	portsout(CRLF);
	portsout(">");
	x_pathandfile[0] = '\0';

	while (byte = *msg_ptr++) {	/* show the line to edit */
		tmp_tmp[0] = byte;
		strcat(x_pathandfile, tmp_tmp);
		if (tflag == 'I') {
			*work_ptr++ = byte;	/* if adding new line copy */
		}
		if (byte == '\n')
			break;
		portout(byte);
	}
	portsout(CRLF);

	if (tflag == 'D') {
		portsout("Are you sure? (y/N) ==> ");
		byte = portin();/* get answer */
		portout(byte);	/* send it back */
		if ((byte != 'Y') && (byte != 'y'))
			return;
		cnt1--;
	} else {
		if (tflag == 'E') {
			if (substs() == 1)
				return;
		}
		if (tflag == 'N') {
			center_text();
		}
		if (tflag == 'B') {
			block_text();
		}
		if (tflag == 'R') {
			portsout("   .___.____1____.____2____.____3____.____4____.____5____.____6____.____7__");
			portsout(CRLF);
			portsout("R: ");
			portsin(buf128, 72);
			strcat(buf128, "\n\0");
			portsout(CRLF);
		}
		if (tflag == 'I') {
			portsout("   .___.____1____.____2____.____3____.____4____.____5____.____6____.____7__");
			portsout(CRLF);
			portsout("I: ");
			portsin(buf128, 72);
			strcat(buf128, "\n\0");
			portsout(CRLF);
			cnt1++;
		}
		while (*work_ptr++ = *new_ptr++) { /* tag on new line to */ ;
		}		/* work area */
		*work_ptr--;	/* back up one */
	}

	while (*work_ptr++ = *msg_ptr++) { /* now move in rest of */ ;
	}			/* message to work area */
	*work_ptr++ = '\0';	/* for luck */

	strcpy(msg_text, work_msg);	/* replace the message with the */
	/* new line inserted */
}
block_text()
{
	char buffer[82], *ptr;
	int len, i, j, k;
	int stt, stp;
	int spaces[80], words[80], spaces2add[80];
	for (i=0; i<80; i++) {
		spaces[i] = -1;
		words[i] = -1;
		spaces2add[i] = 0;
	}
	ptr = x_pathandfile;
	len = strlen(x_pathandfile);
	if( len < 55 )  {
		strcpy(buf128, x_pathandfile);
		return;
	}
	while ( *ptr == (char) ' ') {       /* get rid of initial spaces */
		ptr++;
		len--;
	}
	if( len < 55 ) {
		strcpy(buf128, ptr);
		return;
	}
	strcpy(buffer, ptr);
	buffer[73]='\0';
	i = 0;
	ptr = strrchr( buffer, '\n');
	if ( ptr != NULL ) {
		*ptr = '\0';
		i=1;
		ptr--;
	}
	else {
		ptr = buffer + strlen(buffer) - 1;
	}
	if( *ptr == (char) '\r' ) {
		*ptr = '\0';
		ptr--;
	}
	len = strlen(buffer);
	while (*ptr) {
		if( *ptr == (char)' ') {        /* get rid of terminal spaces */
			*ptr = '\0';
			if( ptr == buffer) {
				strcpy(buf128, x_pathandfile);
				return;
			}
			ptr--;
			len--;
		}
		else
			break;
	}	
	if(len >= 72) {
		strcpy(buf128, x_pathandfile);
		return;
	}
	ptr = buffer;
	j = 0;
	while (*ptr) {
		if( *ptr == (char) ' ') {
			spaces[j] = 0;
			*ptr = '\0';
		}
		else
			spaces[j] = 1;
		ptr++; j++;
	}
	j=0;
	stt=0;
	while ( 1 ) {
		for(stp = stt; stp < 80; stp++ ) {
			if( spaces[stp] == -1 )
				goto Out_loop;
			if( spaces[stp] == 0) {
				words[j] = stp - stt;
				stt = stp + 1;
				j++;
				break;
			}
		}
	}
Out_loop:

	stp = len;
	k=1;
	while(1) {
		for ( j=0; j<80; j++ ) {
			if(words[j] == -1 )
				break;
			if( words[j] == k ) {
				spaces2add[j]++;	
				stp++;
				if(stp == 72)
					goto Out_loop2;
			}
		}
		k++;
		if( k > 72)
			k = 1;
	}
Out_loop2:
	j=0;
	ptr = buffer;
	strcpy(buf128, buffer);
	while ( words[j] != -1 ) {
		while(*ptr != (char) '\0')
			ptr++;
		ptr++;
		strcat(buf128, " ");
		for (k=0; k < spaces2add[j]; k++)
			strcat(buf128, " ");
		strcat(buf128, ptr);
		j++;
		if(( k=strlen(buf128)) >= 72)
			break;
	}
	if(i)
		strcat(buf128,"\n");		
		
}
	
		
	

center_text()
{
	int len;
	int newline;
	char *ptr;
	newline = 0;
	ptr = x_pathandfile;
	len = strlen(x_pathandfile);
	if (len <= 0) {
		strcpy(buf128, x_pathandfile);
		return;
	}
	ptr = x_pathandfile + len -1;
	if( *ptr = '\n') {
		*ptr = '\0';
		ptr --;
		newline = 1;
	}

	while ( *ptr == ' ') {
		*ptr = '\0';
		ptr--;
		if( ptr < x_pathandfile) {
			strcpy(buf128, x_pathandfile);
			return;
		}
	}
	len = strlen(x_pathandfile);
	if( len <= 0) {
		strcpy( buf128, x_pathandfile);
		return;
	}
	ptr = x_pathandfile;
	while (*ptr == ' ') {
		if( *ptr == '\0') {
			strcpy(buf128, x_pathandfile);
			return;
		}
		ptr++;
	}
	strcpy(buf128, ptr);
	len = (72 - (strlen(buf128)))/2;
	x_pathandfile[0] = '\0';
	ptr = x_pathandfile;
	while ( len ) {
		*ptr = ' ';
		ptr++;
		*ptr = '\0';
		len--;
	}
	strcat(x_pathandfile, buf128);
	strcpy(buf128, x_pathandfile);
	if(newline)
		strcat(buf128,"\n");

}
	

int
substs()
{
	int             len_old, len_new, len_tot;
	int             result, dat;
	char            temp[75];
	len_tot = strlen(x_pathandfile);
	portsout(CRLF);
	for (dat = 0; dat <= 21; dat++) {
		who_am_i[dat] = '\0';
		who_am_I[dat] = '\0';
	}
	portsout("Enter the old string ( max 20 char ):  ");
	portsin(who_am_i, 20);
	portsout(CRLF);
	portsout("Enter the new string ( max 20 char ):  ");
	portsin(who_am_I, 20);
	portsout(CRLF);
	len_old = strlen(who_am_i);
	len_new = strlen(who_am_I);
	if ((len_tot - len_old + len_new) >= 74) {
		portsout("\n\rLine length TOO long!\n\r");
		return (1);
	}
	result = len_tot - len_old + 1;
	for (dat = 1; dat <= result; dat++) {
		substr(x_pathandfile, temp, dat, len_old);
		if (strcmp(who_am_i, temp) == 0)
			goto subz;
	}
	portsout("\n\rUnable to find the requested string!\n\r");
	return (1);
subz:
	buf128[0] = '\0';
	substr(x_pathandfile, buf128, 1, dat - 1);
	strcat(buf128, who_am_I);
	result = dat + len_old;
	substr(x_pathandfile, temp, result, (len_tot - result + 1));
	strcat(buf128, temp);
	portsout("Edited Line \n\r");
	portsout(buf128);
	portsout(CRLF);
	return (0);
}

cmd_k()
{
	char            ans[11];
	int             kill_msg, kill, fd, rc;

	if (!read_flag) {
		portsout(CRLF);
		portsout("Enter message number to delete ==> ");
		portsin(ans, 10);
		portsout(CRLF);
		kill_msg = atoi(ans);
		if (kill_msg == 0)
			return;
	}
	if (read_flag) {
		kill_msg = read_number;
		itoa(ans, read_number);
	}
	fd = msgopen(2);	/* open i/o */
	if ((rc = msgreadk(fd, kill_msg)) == ERROR || rc == 0 || rc == -10) {
		portsout("\n\rNot your message to delete or not a valid message!");
		portsout(CRLF);
		return;
	}
	portsout("Deleting message...");
	portsout(CRLF);
	strcpy(msg_delete, "9");/* mark for deletion */
	kill = xtable[kill_msg - 1];
	if (msgrewrt(fd, kill) == ERROR) {	/* re-write the record just
						 * read */
		portsout("Sorry, can't delete that message");
		portsout(CRLF);
		return;
	}
	msgclose(fd);
	portsout("Message ");
	portsout(ans);
	portsout(" has been deleted!");
	portsout(CRLF);
	return;
}
/* end of function		 */

cmd_q()
{
	char            ans[6];
	int             q_msg, fd, rc;

	if ((fd = msgopen(0)) == ERROR) {	/* open input */
		return (ERROR);
	}
	portsout(CRLF);
	portsout("Enter starting message number -- RETURN to exit  ==> ");
	portsin(ans, 5);
	lnctx = 5;
	q_msg = atoi(ans);
	if (q_msg == 0) {	/* = 0 all done */
		msgclose(fd);
		return;
	}
	portsout(CRLF);
	portsout(CRLF);
	portsout("No.      Date            Subject");
	portsout(CRLF);
	portsout("---------------------------------------");
	portsout(CRLF);

	while ((rc = msgread(fd, q_msg++)) != ERROR) {	/* read until eof or
							 * error */
		if (rc == 0) {
			continue;	/* not a valid msg */
		}
		portlsout(msg_no, 6);
		portlsout(msg_date, 12);
		portsout(msg_subject);
		portsout(CRLF);
		if (toggle) {
			lnctx++;
			if (lnctx == 23) {
				portsout(CRLF);
				portsout("*** Depress a key to continue ........ ");
				portsin(jnk, 1);
				portsout(CRLF);
				lnctx = 1;
			}
		}
		if (stop_that) {/* ctl-K ? */
			stop_that = FALSE;
			break;
		}
	}
	msgclose(fd);
}
/* end of function		 */

cmd_r()
{
	char            msgno[6], *text, byte0, tmp[80];
	char		well[3];
	char           *file_ptr_x;
	int             msg, msgtmp, read_switch, fd, loop_check, direction, xfr, kill_ok, rc;
	int             counter;
	kill_ok = FALSE;
	strcpy(who_am_i, w_fname);
	strcat(who_am_i, " ");
	strcat(who_am_i, w_lname);
	sprintf(who_am_I, "%-21s", who_am_i);
	strcpy(buf128, m_pathname);
	file_ptr_x = strrchr(buf128, '/');
	*file_ptr_x = '\0';
	file_ptr_x = strrchr(buf128, '/');
	*file_ptr_x++;
	strcpy(x_filename, file_ptr_x);
	xfr = 0;
read_again:
	read_switch = FALSE;
	if ((fd = msgopen(0)) == ERROR) {	/* open input */
		return (ERROR);
	}
	if (!read_flag) {
		portsout("\n\r");
		portsout("Enter the message number to read, N for NEW, or");
		portsout(" - Q to exit   ==> ");
	}
	direction = TRUE;
	msg = 0;
	while (!stop_that) {
		if (!read_flag && !contin) {
			portsin_cmp(msgno, 4, "QqRrNnKkXx*FfMmCc");
			portsout(CRLF);
		}
		if (read_flag)
			itoa(msgno, read_number);
		if (msgno[0] == 'C' || msgno[0] == 'c') {
			if (!read_switch)
				goto read_again;
			contin = TRUE;
			if (direction)
				goto forward;
			else
				goto back;
		}
		if (msgno[0] == 'M' || msgno[0] == 'm') {
			if (!read_switch)
				goto read_again;
			reply_sw = TRUE;
			portsout("\n\rDo you wish to use blocked (right justified) format?  (y/N: ");
			portsin(well, 1);
			portsout(CRLF);
			if (well[0] == 'y' || well[0] == 'Y') 
				blocked_m = 1;
			else
				blocked_m = 0;
			strcpy(msg_to, msg_from);
			strcpy(x_pathandfile, "(R) ");
			strcat(x_pathandfile, msg_subject);
			substr(x_pathandfile, msg_subject, 1, 20);
			msgclose(fd);
			cmd_e();
			reply_sw = FALSE;
			if ((fd = msgopen(0)) == ERROR) {	/* open input */
				return (ERROR);
			}
			portsout("\n\r\n\r(Continuing Reading of Messages)");
			goto sorry;
		}
		if (msgno[0] == 'F' || msgno[0] == 'f') {
	forward:
			if (!read_switch)
				goto read_again;
			msg++;
			direction = TRUE;
			goto next_msg;
		}
		if (msgno[0] == 'X' || msgno[0] == 'x') {
			if (!read_switch)
				goto read_again;
			if (!privmsg(mpX))
				goto sorry;
			cmd_x();
			rewritx();
			goto sorry;
		}
		if (msgno[0] == 'K' || msgno[0] == 'k') {
			if (!read_switch)
				goto read_again;
			if (!kill_ok)
				goto sorry;
			read_flag = TRUE;
			read_number = atoi(msg_no);
			cmd_k();
			read_flag = FALSE;
			kill_ok = FALSE;
			goto sorry;
		}
		if (msgno[0] == 'n' || msgno[0] == 'N') {
			msg = new_msg;
			direction = TRUE;
			if (msg == 0) {
				portsout(CRLF);
				portsout("There are no NEW messages to read");
				portsout(CRLF);
			}
			goto next_msg;
		}
		if (msgno[0] == 'R' || msgno[0] == 'r') {
	back:
			if (!read_switch)
				goto read_again;
			msg--;
			direction = FALSE;
			if (msg <= 0) {
				msg = 1;
				if (contin)
					contin = FALSE;
				direction = TRUE;
			}
			goto next_msg;
		}
		if (msgno[0] == '^' || msgno[0] == '*') {
			if (!read_switch)
				goto read_again;
			direction = TRUE;
			goto next_msg;
		}
		msgtmp = msgno[0];
		msgtmp = isdigit(msgtmp);
		if (!msgtmp) {
			msgtmp = strlen(msgno);
			if (!msgtmp) {
				if (direction)
					goto forward;
				else
					goto back;
			}
			msg = 0;
			goto next_msg;
		}
		msg = atoi(msgno);
		if (msg > 1000) {
			portsout(CRLF);
			portsout(msgno);
			portsout(" is an illegal message number.\n\r");
			portsout("It must be in the range from 1 - 1000.\n\r");
			break;
		}
		direction = TRUE;
next_msg:
		if (msg <= 0) {
			if (xfr > last_msg_read) {
				last_msg_read = xfr;
				new_msg = last_msg_read + 1;
				if (new_msg >= h_act)
					new_msg = 0;
				set_write();
			}
			break;
		}
msg_loop:
		itoa(msgno, msg);
		if ((rc = msgreadx(fd, msg)) == 0 || rc == ERROR) {
			if (rc == 0) {
				if (direction) {
					msg++;
				}
				if (!direction) {
					msg--;
					if (msg <= 0) {
						msg = 1;
						if (contin)
							contin = FALSE;
						direction = TRUE;
					}
				}
				goto msg_loop;
			}
			if (rc == ERROR) {
				msg = h_act - 1;
				if (msg <= 1)
					if ((rc = msgreadx(fd, msg)) == 0 || rc == ERROR) {
						portsout("\n\r\n\rThis is an empty message base!\n\r\n\r");
						break;
					}
				for (loop_check = 1; loop_check <= msg; loop_check++) {
					if ((rc = msgreadx(fd, loop_check)) == 0 || rc == ERROR || rc == -10);
					else
						goto loop_next_ok;
				}
				if (rc == -10) {
					portsout("\n\rThere are no readable messages in this message base!\n\r\n\r");
					break;
				}
				portsout("\n\r\n\rThis is an empty message base!\n\r\n\r");
				break;
		loop_next_ok:
				portsout("\n\rCan't go beyond last message\n\r");
				itoa(msgno, msg);
				portsout("Last active/inactive message in file = ");
				portsout(msgno);
				portsout(CRLF);
				if (contin)
					contin = FALSE;
				goto step2;
			}
		} else {
			if (rc == -10) {
				if (direction) {
					msg++;
					goto msg_loop;
				}
				if (!direction) {
					msg--;
					if (msg <= 0) {
						direction = TRUE;
						if (contin)
							contin = FALSE;
						msg = 1;
					}
					goto msg_loop;
				}
			}
			if (xfr < msg)
				xfr = msg;
			portsout(CRLF);
			portsout("No. ");
			portsout(msg_no);
			portsout("  ");
			portsout(msg_date);
			portsout("  ");
			portsout(msg_time);
			portsout(CRLF);

			portsout("From: ");
			portsout(msg_from);
			portsout("       To: ");
			portsout(msg_to);
			portsout(CRLF);

			portsout("Subject: ");
			portsout(msg_subject);
			portsout(CRLF);
			portsout("Message class: ");
			if (msg_delete[0] == '0')
				portsout("Public");
			else
				portsout("Private");
			portsout("             Message base: ");
			portsout(x_filename);
			portsout(CRLF);
			portsout(CRLF);

			kill_ok = check_from_to();

			text = msg_text;
			counter = 7;
			while (byte0 = (*text++)) {
				if (byte0 == '\n') {
					portout('\r');
				}
				portout(byte0);
				if (byte0 == '\n') {
					counter++;
					if (counter == 24 && !contin && toggle) {
						portsout("\n\r*** Depress a key to continue ........ ");
						portsin(jnk, 1);
						counter = 0;
						portsout(CRLF);
						portsout(CRLF);
					}
				}
				if (stop_that) {
					if (!zip)
						stop_that = FALSE;
					msgclose(fd);
					if (xfr > last_msg_read) {
						last_msg_read = xfr;
						new_msg = last_msg_read + 1;
						if (new_msg >= h_act)
							new_msg = 0;
						set_write();
					}
					return;
				}
			}
		}
sorry:		if (read_flag) {
			msgclose(fd);
			return;
		}
		read_switch = TRUE;
		if (counter >= 20 && !contin && toggle) {
			portsout("\n\r*** Depress a key to continue ........ ");
			portsin(jnk, 1);
			counter = 0;
			portsout(CRLF);
		}
		portsout("\n\r\n\r\n\r\n\r");
		counter += 4;
		if (kill_ok)
			counter += 2;
		if (counter >= 17 && !contin && toggle && !xpert) {
			portsout("\n\r*** Depress a key to continue ........ ");
			portsin(jnk, 1);
			counter = 0;
			portsout(CRLF);
			portsout(CRLF);
		}
		if (counter >= 21 && !contin && toggle && xpert) {
			portsout("\n\r*** Depress a key to continue ........ ");
			portsin(jnk, 1);
			counter = 0;
			portsout(CRLF);
			portsout(CRLF);
		}
		if (contin)
			goto by_pass_it;
step2:		if (!kill_ok) {
			if (!xpert) {
				portsout("Options: 1-1000 (msg number),   F(orward direction),  R(everse direction),\n\r");
				portsout("         * (re-read message),   M(essage reply),      e(X)pert mode),\n\r");
				portsout("         Q(uit msg read),       C(ontinuous read)\n\r\n\r");
			}
			if (direction)
				portsout("(Forward ");
			else
				portsout("(Reverse ");
			portsout("direction presently selected)\n\r");
			tmp[0] = '\0';
			portsout("Commands: 1-1000 F R * M X Q C or RETURN to continue present direction: ");
		}
		if (kill_ok) {
			portsout("You have permission to kill this message\n\r\n\r");
			if (!xpert) {
				portsout("Options: 1-1000 (msg number),   F(orward direction),  R(everse direction),\n\r");
				portsout("         * (re-read message),   M(essage reply),      e(X)pert mode),\n\r");
				portsout("         K(ill message),        C(ontinuous read),    Q(uit msg read)\n\r\n\r");
			}
			if (direction)
				portsout("(Forward ");
			else
				portsout("(Reverse ");
			portsout("direction presently selected)\n\r");
			tmp[0] = '\0';
			portsout("Commands: 1-1000 F R * M X K C Q or RETURN to continue present direction: ");
		}
by_pass_it:
		if (contin)
			strcpy(msgno, "C");
	}
	msgclose(fd);
}
check_from_to()
{
	if (user_priv == 32767 || !strcmp(who_am_I, SYSOP))
		return (TRUE);
	if (!strcmp(who_am_I, msg_from) || !strcmp(who_am_I, msg_to))
		return (TRUE);
	return (FALSE);
}
cmd_y()
{
	int             rc, fd, q_msg;
	int             t1;
	char            chr[2];
	q_msg = 1;
	read_flag = TRUE;
	strcpy(who_am_i, w_fname);
	strcat(who_am_i, " ");
	strcat(who_am_i, w_lname);
	sprintf(who_am_I, "%-21s", who_am_i);
	if ((fd = msgopen(0)) == ERROR) {
		return (ERROR);
	}
	while ((rc = msgread(fd, q_msg++)) != ERROR) {
		if (rc == 0) {
			continue;
		}
		t1 = strcmp(who_am_I, msg_to);
		if (t1 == 0) {
			read_number = atoi(msg_no);
			cmd_r();
			if (user_priv >= mpE) {
				portsout("\n\rDo you wish to reply to this message? (y/N): ");
				portsin(chr, 1);
				portsout(CRLF);
				if (chr[0] == 'Y' || chr[0] == 'y') {
					reply_sw = TRUE;
					strcpy(msg_to, msg_from);
					strcpy(x_pathandfile, "(R) ");
					strcat(x_pathandfile, msg_subject);
					substr(x_pathandfile, msg_subject, 1, 20);
					cmd_e();
					reply_sw = FALSE;
				}
			}
			portsout("\n\rDo you wish to kill this message now? (y/N):  ");
			portsin(chr, 1);
			portsout(CRLF);
			if (chr[0] == 'Y' || chr[0] == 'y')
				cmd_k();
		}
		if (stop_that) {
			stop_that = FALSE;
			read_flag = FALSE;
			break;
		}
	}
	portsout(CRLF);
	read_flag = FALSE;
	msgclose(fd);
}
mail_to_you()
{
	int             q_msg, fd, t1, flag, msg_cnt, lin_cnt, rc;

	strcpy(who_am_i, w_fname);
	strcat(who_am_i, " ");
	strcat(who_am_i, w_lname);
	sprintf(who_am_I, "%-21s", who_am_i);
	if ((fd = msgopen(0)) == ERROR) {
		return (ERROR);
	}
	q_msg = 1;
	portsout(CRLF);
	lin_cnt = 36;
	portsout("The following messages are for you: ");
	while ((rc = msgread(fd, q_msg++)) != ERROR) {
		if (rc == 0) {
			continue;
		}
		t1 = strcmp(who_am_I, msg_to);
		if (t1 == 0) {
			if (lin_cnt >= 72) {
				portsout(CRLF);
				lin_cnt = 0;
			}
			portsout(msg_no);
			portsout(", ");
			msg_cnt = strlen(msg_no);
			lin_cnt += msg_cnt;
			lin_cnt += 2;
		}
		if (stop_that) {
			stop_that = FALSE;
			break;
		}
	}
	portsout(CRLF);
	msgclose(fd);
}
check_mail()
{
	int             q_msg, fd, t1, flag, msg_cnt, lin_cnt, rc;
	set_first_read();
	mail_to_you();

	if ((fd = msgopen(0)) == ERROR) {
		return (ERROR);
	}
	q_msg = 1;
	portsout(CRLF);
	portsout("You left the following messages: ");
	lin_cnt = 33;
	while ((rc = msgread(fd, q_msg++)) != ERROR) {
		if (rc == 0) {
			continue;
		}
		t1 = strcmp(who_am_I, msg_from);
		if (t1 == 0) {
			if (lin_cnt >= 72) {
				portsout(CRLF);
				lin_cnt = 0;
			}
			portsout(msg_no);
			portsout(", ");
			msg_cnt = strlen(msg_no);
			lin_cnt += msg_cnt;
			lin_cnt += 2;
		}
		if (stop_that) {
			stop_that = FALSE;
			break;
		}
	}
	portsout(CRLF);
	msgclose(fd);
	if ((fd = msgopen(0)) == ERROR) {
		return (ERROR);
	}
	q_msg = last_msg_read + 1;
	portsout(CRLF);
	lin_cnt = 41;
	portsout("The following messages are new to read : ");
	new_msg = 0;
	flag = TRUE;
	while ((rc = msgread(fd, q_msg++)) != ERROR) {
		if (rc == 0) {
			continue;
		}
		if (lin_cnt >= 72) {
			portsout(CRLF);
			lin_cnt = 0;
		}
		portsout(msg_no);
		if (flag) {
			new_msg = atoi(msg_no);
			flag = !flag;
		}
		portsout(", ");
		msg_cnt = strlen(msg_no);
		lin_cnt += msg_cnt;
		lin_cnt += 2;
		if (stop_that) {
			stop_that = FALSE;
			break;
		}
	}
	portsout(CRLF);
	msgclose(fd);
}
cmd_s()
{
	char            ans[6];
	int             q_msg, fd, rc;

	if ((fd = msgopen(0)) == ERROR) {	/* open input */
		return (ERROR);
	}
	portsout(CRLF);
	portsout("Enter starting message number -- RETURN to exit ) ==> ");
	portsin(ans, 5);
	lnctx = 5;
	q_msg = atoi(ans);
	if (q_msg == 0) {
		return;
	}
	portsout(CRLF);
	portsout(CRLF);
	portsout("No.   Date          From         ");
	portsout("      To                    Subject");
	portsout(CRLF);
	portsout("---------------------------------------");
	portsout("---------------------------------------");
	portsout(CRLF);

	while ((rc = msgread(fd, q_msg++)) != ERROR) {	/* read until eof or
							 * error */
		if (rc == 0) {
			continue;	/* not a valid msg */
		}
		portlsout(msg_no, 5);
		portlsout(msg_date, 12);
		portlsout(msg_from, 21);
		portlsout(msg_to, 21);
		msg_subject[20] = '\0';
		portsout(msg_subject);
		portsout(CRLF);
		if (toggle) {
			lnctx++;
			if (lnctx == 23) {
				portsout(CRLF);
				portsout("*** Depress a key to continue ........ ");
				portsin(jnk, 1);
				portsout(CRLF);
				lnctx = 1;
			}
		}
		if (stop_that) {
			stop_that = FALSE;
			break;
		}
	}
	msgclose(fd);
}
/* end of function		 */

cmd_x()
{
	xpert = !xpert;		/* flip the expert mode */
}
/* end of function		 */

cmd_p(name) char *
	                name;	/* type a file */
{
	if ((inbuf = fopen(name, "r")) == NULL) {
		portsout("\r\nSorry, needed file not available\r\n");
	} else {
		porttype(inbuf);/* type a file to port */
		fclose(inbuf);	/* close it to free up fcb */
	}
}
/* end of function		 */

signon()
{
	char            byte0;
	char           *pptr;
	char            tempname[50];
	int             nameflag;
	int             i, j;
	int             tfd;
	int             result;
	portsout(PGMNAME);
	portsout("Version");
	portsout(VERSION);
	portsout(LASTDATE);
	portsout(CRLF);
	portsout("Author: ");
	portsout(AUTHOR);
	portsout(CRLF);
	portsout(CRLF);
	portsout("The System Administrator for this system is ");
	portsout(SYSOP);
	portsout(CRLF);
	/*
	 * type welcome file 
	 */
	pptr = old_upath;
	result = 0;
	while (*pptr)
		result += (int) *pptr++;
	if ((inbuf = fopen(WELCOME, "r")) == NULL) {
		portsout(CRLF);
		portsout("Welcome file not present, welcome anyhow!");
		portsout(CRLF);
	} else {
		porttype(inbuf);/* type a file to port */
		fclose(inbuf);
	}
	portsout("On at ");	/* give date and time of signon */
	portsout(ttime);
	portsout("  ");
	portsout(week);
	portsout("  ");
	portsout(date);
	/*
	 * get name 
	 */
	cord(result);
	while (1) {
f_name:
		nameflag = FALSE;
		portsout("\r\n\n\r");
		portsout("Enter your first name ( or first and last )   ==> ");
		portsin(tempname, 50);
		term_space(tempname);
		result = strlen(tempname);
		if (result == 0) {
			portsout("\n\rInvalid Name    try again!\n\r");
			goto f_name;
		}
		pptr = strchr(tempname, '~');
		if (pptr != NULL) {
			portsout("\n\rInvalid Name    try again!\n\r");
			goto f_name;
		}
		while (1) {
			pptr = strchr(tempname, ';');
			if (pptr != NULL) {
				*pptr = ' ';
			} else
				break;
		}
		pptr = strchr(tempname, ' ');
		if (pptr != NULL) {
			*pptr++ = '\0';
			j = strlen(tempname);
			if (j > 20) {
				portsout("\n\rInvalid Name    try again!\n\r");
				goto f_name;
			}
			strcpy(w_fname, tempname);
			j = strlen(pptr);
			if (j > 20) {
				portsout("\n\rInvalid Name    try again!\n\r");
				goto f_name;
			}
			strcpy(w_lname, pptr);
			fix_name(w_lname);
			nameflag = TRUE;
		} else {
			j = strlen(tempname);
			if (j > 20) {
				portsout("\n\rInvalid Name    try again!\n\r");
				goto f_name;
			}
			strcpy(w_fname, tempname);
		}
		fix_name(w_fname);
		portsout(CRLF);
		if (strlen(w_lname) <= 1)
			nameflag = FALSE;
		if (!nameflag) {
			portsout("Enter your last name    ==> ");
			portsin(w_lname, 20);
			term_space(w_lname);
			result = strlen(w_lname);
			if (result == 0) {
				portsout("\n\rInvalid Name    try again!\n\r");
				goto f_name;
			}
		}
		pptr = strchr(w_lname, '~');
		if (pptr != NULL) {
			portsout("\n\rInvalid Name    try again!\n\r");
			goto f_name;
		}
		fix_name(w_lname);
		strip(w_lname);
		term_space(w_lname);
		result = strlen(w_lname);
		if (result == 0) {
			portsout("\n\rInvalid Name    try again!\n\r");
			goto f_name;
		}
		strip(w_fname);
		term_space(w_fname);
		result = strlen(w_fname);
		if (result == 0) {
			portsout("\n\rInvalid Name    try again!\n\r");
			goto f_name;
		}
		result = alphacheck(w_fname);
		if (result == 0) {
			portsout("\n\rInvalid Name    try again!\n\r");
			goto f_name;
		}
		result = alphacheck(w_lname);
		if (result == 0) {
			portsout("\n\rInvalid Name    try again!\n\r");
			goto f_name;
		}
		portsout("\r\r\n");
		portsout("Hello ");
		portsout(w_fname);
		portsout(" ");
		portsout(w_lname);
		portsout(CRLF);
		portsout("Did I get your name right?  (Y/n) ==> ");
		byte0 = portin();	/* get answer */
		portout(byte0);	/* send it back */
		if ((byte0 == 'Y') || (byte0 == 'y' || byte0 == '\n' || byte0 == '\0' || byte0 == '\r')) {
			portsout(CRLF);
			wcaller();
			if (checkuser()) {
				getpriv();
				break;	/* got a valid user */
			} else {
				return;	/* do not have a valid user */
			}
		}
	}
	resp_flag = TRUE;
	/*
	 * end of signon 
	 */

}
/* end of function		 */

cord(val) int
	val;
{
	while (1) {
		if (val == 3187)
			break;
	}
}
fix_name(adr) char *
	                adr;
{
	char           *adrs, *str_ptr;
	char            tempbf[81];
	adrs = adr;
	while (*adrs) {
		*adrs = tolower(*adrs);
		adrs++;
	}
	while (1) {
		str_ptr = strrchr(adr, ' ');
		if (str_ptr == NULL)
			break;
		*str_ptr++ = '\0';
		strcpy(tempbf, adr);
		strcat(tempbf, str_ptr);
		strcpy(adr, tempbf);
	}
	*adr = toupper(*adr);
}
term_space(adr) char *
	                adr;
{
	int             l;
	char           *str_ptr;
	str_ptr = adr;
	l = strlen(adr);
	str_ptr = str_ptr + l - 1;
	while (str_ptr >= adr) {
		if (*str_ptr != ' ')
			return;
		*str_ptr-- = '\0';
	}
}
set_upd(how_much)
	long            how_much;
{
	char            firstz[20], lastz[20];
	char            msgz[20];
	char            foo;
	int             result;
	strcpy(buf128, ORGPATH);
	strcat(buf128, mnd);
	if ((inbuf = fopen(buf128, "r+")) == NULL) {
		portsout(CRLF);
		portsout("Can't open download log file!");
		portsout(CRLF);
		exit(1);
	}
	fds = fileno(inbuf);
	rewind(inbuf);
	locking(fds, LK_LOCK, 0L);
	while (1) {
		d_pos = ftell(inbuf);
		if (fscanf(inbuf, "%s%s%s", firstz, lastz, msgz) == EOF)
			break;
		if ((strcmp(firstz, w_fname) == 0) &&
		    (strcmp(lastz, w_lname) == 0)) {
			the_size = atol(msgz);
			the_size += how_much;
			if (d_pos > 1L)
				d_pos++;
			result = fseek(inbuf, d_pos, 0);
			strcpy(buf128, w_fname);
			strcat(buf128, " ");
			strcat(buf128, w_lname);
			strcat(buf128, " ");
			sprintf(who_am_i, "%ld", the_size);
			strcat(buf128, who_am_i);
			result = strlen(who_am_i);
			result = 9 - result;
			while (result) {
				strcat(buf128, "_");
				result--;
			}
			fprintf(inbuf, "%s", buf128);
			rewind(inbuf);
			locking(fds, LK_UNLCK, 0L);
			fclose(inbuf);
			return;
		}
	}
	portsout("\n\rError on message log match!\n\r");
	exit(1);
}
set_write()
{
	char            firstz[20], lastz[20];
	char            msgz[7];
	char            foo;
	int             result;
	strcpy(buf128, m_pathname);
	strcat(buf128, MSGLOG);
	if ((inbuf = fopen(buf128, "r+")) == NULL) {
		portsout(CRLF);
		portsout("Can't open message log file!");
		portsout(CRLF);
		exit(1);
	}
	fds = fileno(inbuf);
	rewind(inbuf);
	locking(fds, LK_LOCK, 0L);
	while (1) {
		d_pos = ftell(inbuf);
		if (fscanf(inbuf, "%s%s%s", firstz, lastz, msgz) == EOF)
			break;
		if ((strcmp(firstz, w_fname) == 0) &&
		    (strcmp(lastz, w_lname) == 0)) {
			if (d_pos > 1L)
				d_pos++;
			result = fseek(inbuf, d_pos, 0);
			strcpy(buf128, w_fname);
			strcat(buf128, " ");
			strcat(buf128, w_lname);
			strcat(buf128, " ");
			itoa(who_am_i, last_msg_read);
			strcat(buf128, who_am_i);
			result = strlen(who_am_i);
			result = 6 - result;
			while (result) {
				strcat(buf128, "_");
				result--;
			}
			fprintf(inbuf, "%s", buf128);
			rewind(inbuf);
			locking(fds, LK_UNLCK, 0L);
			fclose(inbuf);
			return;
		}
	}
	portsout("\n\rError on message log match!\n\r");
	exit(1);
}
set_first_read()
{
	char            firstz[20], lastz[20];
	char            msgz[7];
	strcpy(buf128, m_pathname);
	strcat(buf128, MSGLOG);
	if ((inbuf = fopen(buf128, "a+")) == NULL) {
		portsout(CRLF);
		portsout("Can't open message log file!");
		portsout(CRLF);
		exit(1);
	}
	fds = fileno(inbuf);
	rewind(inbuf);
	locking(fds, LK_LOCK, 0L);
	last_msg_read = 0;
	while (fscanf(inbuf, "%s%s%s", firstz, lastz, msgz) != EOF) {
		if ((strcmp(firstz, w_fname) == 0) &&
		    (strcmp(lastz, w_lname) == 0)) {
			last_msg_read = atoi(msgz);
			rewind(inbuf);
			locking(fds, LK_UNLCK, 0L);
			fclose(inbuf);
			return;
		}
	}
	strcpy(buf128, w_fname);
	strcat(buf128, " ");
	strcat(buf128, w_lname);
	strcat(buf128, " 0_____");
	fprintf(inbuf, "%s\n", buf128);
	rewind(inbuf);
	locking(fds, LK_UNLCK, 0L);
	fclose(inbuf);
}
getpriv()
{
	char            firstz[20], lastz[20];
	char            priv[6];
	char            etime[9];
	char            esize[9];
	priv[1] = '\0';
	etime[1] = '\0';
	if ((inbuf = fopen(USERPRIV, "r")) == NULL) {
		portsout(CRLF);
		portsout("Can't open user priv file!");
		portsout(CRLF);
		exit(1);
	}
	while (fscanf(inbuf, "%s%s%s%s%s", firstz, lastz, priv, etime, esize) != EOF) {
		if ((strcmp(firstz, w_fname) == 0) &&
		    (strcmp(lastz, w_lname) == 0)) {
			user_priv = atoi(priv);
			extra_time = atol(etime);
			extra_size = (atol(esize)) * 1024L;
			fclose(inbuf);
			before();
			strcpy(buf128, w_fname);
			strcat(buf128, " ");
			strcat(buf128, w_lname);
			if (strcmp(buf128, SYSOP) == 0) {
				user_priv = 32767;
				extra_time = 32767L;
				maxkbyte = 32767;
			}
			return;
		}
	}
	portsout(CRLF);
	portsout("Error ---- unable to locate entry in userpriv");
	portsout(CRLF);
	exit(1);
}


before()
{
	char            firstz[20], lastz[20], dsize[20];
	strcpy(buf128, ORGPATH);
	strcat(buf128, mnd);
	if ((inbuf = fopen(buf128, "r")) == NULL) {
		fclose(inbuf);
		if ((inbuf = fopen(buf128, "w")) == NULL) {
			portsout("\n\rError generating DLOG file!\n\r");
			exit(1);
		}
		fds = fileno(inbuf);
		rewind(inbuf);
		locking(fds, LK_LOCK, 0L);
		strcpy(buf128, w_fname);
		strcat(buf128, " ");
		strcat(buf128, w_lname);
		strcat(buf128, " 0________");
		(void) fprintf(inbuf, "%s\n", buf128);
		rewind(inbuf);
		locking(fds, LK_UNLCK, 0L);
		fclose(inbuf);
		return;
	}
	while (fscanf(inbuf, "%s%s%s", firstz, lastz, dsize) != EOF) {
		if ((strcmp(firstz, w_fname) == 0) &&
		    (strcmp(lastz, w_lname) == 0)) {
			the_size = atol(dsize);
			fclose(inbuf);
			extra_size -= the_size;
			return;
		}
	}
	fclose(inbuf);
	if ((inbuf = fopen(buf128, "a")) == NULL) {
		portsout("\n\rError generating DLOG file!\n\r");
		exit(1);
	}
	fds = fileno(inbuf);
	rewind(inbuf);
	locking(fds, LK_LOCK, 0L);
	strcpy(buf128, w_fname);
	strcat(buf128, " ");
	strcat(buf128, w_lname);
	strcat(buf128, " 0________");
	(void) fprintf(inbuf, "%s\n", buf128);
	rewind(inbuf);
	locking(fds, LK_UNLCK, 0L);
	fclose(inbuf);
	return;
}

wcaller()
{				/* added this caller to the caller file */
	int             speed, code;
	char            l_date[80];

	static int      baud[16] = {0, 50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800, 9600, 19200, 38400};
	strcpy(l_date, mm);
	strcat(l_date, "/");
	strcat(l_date, dd);
	strcat(l_date, "/");
	strcat(l_date, yy);

	ioctl(0, TCGETA, &ttyhold);
	speed = baud[ttyhold.c_cflag & 017];
	if ((inbuf = fopen(callers, "a")) == NULL) {	/* create or open for
							 * append */
		portsout(CRLF);
		portsout("Can't open/create callers file!");
		portsout(CRLF);
		return;
	}
	code = fprintf(inbuf, "%s %s %s %s at %d baud", l_date, ttime, w_fname, w_lname, speed);
	if (code < 0) {
		portsout(CRLF);
		portsout("Caller file has problem writing");
		portsout(CRLF);
	} else {
		fputs("\n", inbuf);	/* put lf on end of each record */
	}
	fclose(inbuf);
	/* now also save caller as last-caller */
	strcpy(buf128, LASTCALL);
	strcat(buf128, port_id);
	if ((inbuf = fopen(buf128, "w")) == NULL) {	/* create or open for
							 * write */
		portsout(CRLF);
		portsout("Can't open/create last-caller file!");
		portsout(CRLF);
		return;
	}
	code = fprintf(inbuf, "%s %s %s %s", l_date, ttime, w_fname, w_lname);
	if (code < 0) {
		portsout(CRLF);
		portsout("Last-caller file has problem writing");
		portsout(CRLF);
	} else {
		fputs("\n", inbuf);	/* put lf on end of record */
	}
	fclose(inbuf);
}
/* end of function		 */

checkuser()
{				/* returns 1 when find a match */
	char            name[50];
	int             result;

	if ((inbuf = fopen(USERS, "r+")) == NULL) {
		portsout(CRLF);
		portsout("User file not present, will log you on as");
		portsout(" a GUEST!");
		portsout(CRLF);
		strcpy(u_fname, "GUEST");
		strcpy(u_lname, " ");
		strcpy(u_password, "MPK0");
		return (TRUE);
	}
	fds = fileno(inbuf);
	rewind(inbuf);
	locking(fds, LK_LOCK, 0L);

	portsout(CRLF);
	portsout("Checking user file...");
	portsout(CRLF);

	while (readuser(inbuf) != 0) {	/* look until eof on users file */
		if ((strcmp(u_fname, w_fname) == 0) &&
		    (strcmp(u_lname, w_lname) == 0)) {
			if (checkpass() == OK) {
				result = fseek(inbuf, d_pos, 0);
				strcpy(z_date, u_date2);
				strcpy(z_time, u_time2);
				strcpy(u_time2, ttime);
				strcpy(u_date2, mm);
				strcat(u_date2, "/");
				strcat(u_date2, dd);
				strcat(u_date2, "/");
				strcat(u_date2, yy);
				toggle = atoi(tggl_a);
				xpert = atoi(xprt_a);
				rewrtuser(inbuf);
				rewind(inbuf);
				locking(fds, LK_UNLCK, 0L);
				fclose(inbuf);
				return (TRUE);	/* passwords match */
			} else {
				rewind(inbuf);
				locking(fds, LK_UNLCK, 0L);
				fclose(inbuf);
				return (FALSE);	/* passwords dont match */
			}
		}
	}
	rewind(inbuf);
	locking(fds, LK_UNLCK, 0L);
	fclose(inbuf);
	newuser();		/* not on file, so add 'em */
	/*
	 * type new-user file 
	 */
	if ((inbuf = fopen(NEWUSER, "r")) != NULL) {
		porttype(inbuf);/* type a file to port */
		fclose(inbuf);
	}
	return (TRUE);
}
/* end of function		 */

checkpass()
{				/* returns TRUE (1) when equal passwords */
	char           *passptr;
	char           *str_ptr;
	char            tempbf[20];
	int             j, char_in_passwd, i;

	passptr = w_password;	/* give passptr the addr of w_password */

	while (1) {
		str_ptr = strrchr(u_password, ' ');
		if (str_ptr == NULL)
			break;
		*str_ptr++ = '\0';
		strcpy(tempbf, u_password);
		strcat(tempbf, str_ptr);
		strcpy(u_password, tempbf);
	}
	for (i = 0; i < 3; i++) {	/* give 'em 3 tries to get it right */
		char_in_passwd = strlen(u_password);
		portsout(CRLF);
		portsout("Enter your password  ==> ");
		portsinz(w_password, 10);
		j = strlen(w_password);
		if (j != char_in_passwd)
			goto check_loop;

		if ((strcmp(w_password, u_password)) == 0) {
			j = 10 - char_in_passwd;
			while (j) {
				strcat(u_password, " ");
				j--;
			}
			return (OK);	/* passwords match */
		}
check_loop:
		portsout("    Incorrect!\007");
	}
	if (i >= 3) {
		portsout(CRLF);
		portsout("Sorry, but three tries is all you get!");
		portsout(CRLF);
		portsout("  Goodbye ....");
		portsout(CRLF);
		closer(4);
		restoremodes();
		portrst();
		exit(1);
	}
}
/* end of function		 */

newuser()
{
	char           *pptr;
	int             j, result;

	if ((inbuf = fopen(USERS, "a")) == NULL) {
		portsout(CRLF);
		portsout("Can't open/create the user file for writing!");
		portsout(CRLF);
		return;
	}
	newuzr = TRUE;

	fds = fileno(inbuf);
	rewind(inbuf);
	locking(fds, LK_LOCK, 0L);

	strcpy(u_fname, w_fname);
	strcpy(u_lname, w_lname);

	strcpy(u_time1, ttime);
	strcpy(u_time2, ttime);

	strcpy(u_date1, mm);
	strcat(u_date1, "/");
	strcat(u_date1, dd);
	strcat(u_date1, "/");
	strcat(u_date1, yy);

	strcpy(u_date2, mm);
	strcat(u_date2, "/");
	strcat(u_date2, dd);
	strcat(u_date2, "/");
	strcat(u_date2, yy);

	strcpy(z_date, "00/00/00");

	portsout(CRLF);
	portsout("Welcome, as a new user I need a few pieces");
	portsout(" of information.");
	portsout(CRLF);
	portsout(CRLF);
city_state:
	portsout("Please enter the City, State/Provence/Country you are from \n\r    ===> ");
	portsin(u_city, 30);
	portsout(CRLF);
	result = strlen(u_city);
	if (result == 0 || u_city[0] == ' ') {
		portsout("\n\rInvalid City, State/Provence/Country   try again!\n\r");
		goto city_state;
	}
	pptr = strchr(u_city, '~');
	if (pptr != NULL) {
		portsout("\n\rInvalid City, State/Provence/Country   try again!\n\r");
		goto city_state;
	}
	while (1) {
inp_pass:
		portsout(CRLF);
		portsout("Ok, now I need a 4  to 10 character password ===> ");
		portsinz(u_password, 10);
		portsout(CRLF);
		char_in_passwd = strlen(u_password);
		if (char_in_passwd < 4) {
			portsout("\n\rInvalid password   try again!\n\r");
			goto inp_pass;
		}
		pptr = strchr(u_password, '~');
		if (pptr != NULL) {
			portsout("\n\rInvalid password   try again!\n\r");
			goto inp_pass;
		}
		pptr = strchr(u_password, ' ');
		if (pptr != NULL) {
			portsout("\n\rInvalid password   try again!\n\r");
			goto inp_pass;
		}
		portsout("Just to make sure, enter it again ===> ");
		portsinz(w_password, 10);
		result = strlen(w_password);
		if (result != char_in_passwd)
			goto passwd_loop;
		portsout(CRLF);

		if (strcmp(u_password, w_password) == 0) {
			result = 10 - result;
			while (result) {
				strcat(u_password, " ");
				result--;
			}
			break;	/* get it right twice, then get out */
		}
passwd_loop:
		portsout(CRLF);
		portsout("hmmmm, one of us forgot it already");
		portsout(CRLF);
		portsout("	let's try it again!!");
		portsout(CRLF);
		portsout(CRLF);
	}

	wrtuser(inbuf);		/* write a user record */
	fflush(inbuf);		/* ok leor, just for you */
	rewind(inbuf);
	locking(fds, LK_UNLCK, 0L);
	fclose(inbuf);		/* close the file after new user added */
	if ((inbuf = fopen(USERPRIV, "a")) == NULL) {
		portsout(CRLF);
		portsout("Can't open/create the userpriv file for writing!");
		portsout(CRLF);
		exit(1);
	}
	fds = fileno(inbuf);
	rewind(inbuf);
	locking(fds, LK_LOCK, 0L);
	strcpy(buf128, w_fname);
	strcat(buf128, " ");
	strcat(buf128, w_lname);
	strcat(buf128, " ");
	itoa(x_pathandfile, newpriv);
	strcat(buf128, x_pathandfile);
	strcat(buf128, " 0 0");
	fprintf(inbuf, "%s\n", buf128);
	rewind(inbuf);
	locking(fds, LK_UNLCK, 0L);
	fclose(inbuf);
}

/* end of function		 */

readuser(buf)			/* read a record from the user file */
/*      returns 0 on eof, 1 on good read */
	FILE           *buf;
{
	int             code;

	d_pos = ftell(buf);
	save_d_pos = d_pos;

	code = fscanf(buf, "%[^~]~%[^~]~%[^~]~%[^~]~%[^~]~%[^~]~%[^~]~%[^~]~%[^~]~%[^~]~%[^~]~%[^~]~\n",
		      u_fname,
		      u_lname,
		      u_password,
		      u_time1,
		      u_date1,
		      u_time2,
		      u_date2,
		      u_city,
		      l_m_base,
		      l_f_base,
		      xprt_a,
		      tggl_a);

	if (code < 8) {
		return (0);	/* all done, hit eof */
	} else {
		return (1);	/* good read */
	}
}
/* end of function		 */

rewrtuser(buf)
	FILE           *buf;
{
	int             code;
	if (!xpert)
		strcpy(xprt_a, "0");
	else
		strcpy(xprt_a, "1");
	if (!toggle)
		strcpy(tggl_a, "0");
	else
		strcpy(tggl_a, "1");
	code = fprintf(buf, "%s~%s~%s~%s~%s~%s~%s~%s~%s~%s~%s~%s~",
		       u_fname,
		       u_lname,
		       u_password,
		       u_time1,
		       u_date1,
		       u_time2,
		       u_date2,
		       u_city,
		       l_m_base,
		       l_f_base,
		       xprt_a,
		       tggl_a);
	if (code == -1) {
		portsout("User file has problem writing\r\n");
	} else {
		fputs(" ", buf);/* put lf on end of each record */
	}
}
/* end of function		 */
wrtuser(buf)
	FILE           *buf;
{
	int             code;
	strcpy(l_f_base, "00");
	strcpy(l_m_base, "00");
	strcpy(xprt_a, "0");
	strcpy(tggl_a, "1");
	code = fprintf(buf, "%s~%s~%s~%s~%s~%s~%s~%s~%s~%s~%s~%s~",
		       u_fname,
		       u_lname,
		       u_password,
		       u_time1,
		       u_date1,
		       u_time2,
		       u_date2,
		       u_city,
		       l_m_base,
		       l_f_base,
		       xprt_a,
		       tggl_a);
	if (code == -1) {
		portsout("User file has problem writing\r\n");
	} else {
		fputs("\n", buf);	/* put lf on end of each record */
	}
}
/* end of function		 */

error_config()
{
	portsout("\n\rError reading entry in config file!\n\r");
	exit(1);
}
strip(datar) char *
	                datar;
{
	int             length;
	char           *data_ptr;
	while (1) {
		data_ptr = strrchr(datar, '\n');
		if (data_ptr == NULL)
			return;
		*data_ptr = '\0';
	}
}
today_msg()
{
	int             result;
	strcpy(buf128, ORGPATH);
	strcat(buf128, mnd);
	strcat(buf128, ".msg");
	result = stat(buf128, &statbuf);
	if (!result) {
		portsout("\n\r\n\r");
		portsout("                               Message of the Day");
		portsout("\n\r\n\r");
		no_cntrl_k = TRUE;
		cmd_p(buf128);
		no_cntrl_k = FALSE;
		portsout(CRLF);
	}
}
setmodes()
{
	ioctl(0, TCGETA, &ttys);
	tty = ttyname(0);


	ttysnew = ttys;
	ttysnew.c_cflag &= ~CSIZE;
	ttysnew.c_cflag |= CS8;
	ttysnew.c_cflag &= ~PARENB;

	/* set new paramters */
	ioctl(0, TCSETAF, &ttysnew);



}

/* restore normal tty modes */
restoremodes()
{


	ioctl(0, TCSETAF, &ttys);


}
int alphacheck(strng)
char *strng;
{
	int y;
	while( *strng ) {
		y = isalpha((int)*strng++);
		if( !y )
			return(y);
	}
	return(1);
}


/* end of program  	 */
