#! /bin/sh
# This is a shell archive.  Remove anything before this line, then feed it
# into a shell via "sh file" or similar.  To overwrite existing files,
# type "sh file -c".
# Contents:  src/mbox.english src/tools.c wendy/Makefile
# Wrapped by kent@sparky on Fri Feb  5 12:18:06 1993
PATH=/bin:/usr/bin:/usr/ucb:/usr/local/bin:/usr/lbin ; export PATH
echo If this archive is complete, you will see the following message:
echo '          "shar: End of archive 5 (of 15)."'
if test -f 'src/mbox.english' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'src/mbox.english'\"
else
  echo shar: Extracting \"'src/mbox.english'\" \(25566 characters\)
  sed "s/^X//" >'src/mbox.english' <<'END_OF_FILE'
X/***************************************************************************/
X/*	    PROGRAMM  ix/Mbox						   */
X/*             DATEI  MBOX.MSG "english"				   */
X/*        FUNKTIONEN  Landessprachen-abhaengige Text-Zeilen		   */
X/*             AUTOR  vs (Volker Schuermann/MINIX-Version)		   */
X/*  LETZTE AENDERUNG  16.01.1993					   */
X/***************************************************************************/
X
X/* ?? SysV.getch.c */
X
X/* admin.c */
X
X#define ADM01_MSG	" Administration (Change User) "
X#define ADM01aMSG	" Administration (Show User) "
X#define ADM02_MSG	"UserID/Username:"
X#define ADM03_MSG	"            User-ID:"
X#define ADM04_MSG	"           Username:"
X#define ADM05_MSG	"           Password:"
X#define ADM06_MSG	"         SH-Account:"
X#define ADM07_MSG	"              Alias:"
X#define ADM08_MSG	"           Hometown:"
X#define ADM09_MSG	"             Street:"
X#define ADM10_MSG	"  Telephone (voice):"
X#define ADM11_MSG	"   Telephone (data):"
X#define ADM12_MSG	"      Date of Birth:"
X#define ADM13_MSG	"           Terminal:"
X#define ADM14_MSG	"             Editor:"
X#define ADM15_MSG	"              Level:"
X#define ADM16_MSG	"               More:"
X#define ADM17_MSG	"               Bell:"
X#define ADM18_MSG	"             Prompt:"
X#define ADM19_MSG	"              Lines:"
X#define ADM20_MSG	"          LastLogin:"
X#define ADM21_MSG	"           LastTime:"
X#define ADM21aMSG	"            Account:"
X#define ADM22_MSG	"             Boards:"
X#define ADM23_MSG	"                SEQ:"
X#define ADM24_MSG	" Administration (Change User) "	
X#define ADM25_MSG	" Administration (Delete User) "
X#define ADM26_MSG	"User-ID"
X#define ADM27_MSG	"Username"
X#define ADM28_MSG	"[DELETE] Really?"
X#define ADM29_MSG	"Which?"
X#define ADM30_MSG	"[ADM] More?"
X#define ADM31_MSG	" Administration (The Revenge of the Sysop) "
X#define ADM32_MSG	"Register User"
X#define ADM33_MSG	"Change User"
X#define ADM34_MSG	"Delete User"
X#define ADM35_MSG	"Show User"
X#define ADM36_MSG	"Show List of Users"
X#define ADM37_MSG	"Back to MBox"
X#define ADM38_MSG	" Administration (Setup) "
X#define ADM39_MSG	"Terminal (ANSI, VT100 etc.)"
X#define ADM40_MSG	"Editor (Textprocessor)"
X#define ADM41_MSG	"Prompt (Id, Board, Rates)"
X#define ADM42_MSG	"Output (Textoutput)"
X#define ADM43_MSG	"Address (Personal Data)"
X#define ADM44_MSG	"Password (To be changed regularly!)"
X#define ADM45_MSG	"Intro (Show State and/or Intro MSG?)"
X#define ADM46_MSG	"Scanner (Date of last login)"
X#define ADM47_MSG	"END (Leave Setup)"
X#define ADM48_MSG	" Administration (Terminal) "
X#define ADM49_MSG	"List-Device"
X#define ADM50_MSG	" Administration (Editor) "
X#define ADM51_MSG	" Administration (Prompt) "
X#define ADM52_MSG	"Time & Signal (BELL)         "
X#define ADM53_MSG	"Time                         "
X#define ADM54_MSG	"Board & Signal (BELL)        "
X#define ADM55_MSG	"Board                        "
X#define ADM56_MSG	"Rates & Signal (BELL)        "
X#define ADM57_MSG	"Rates                        "
X#define ADM58_MSG	" Administration (Textoutput) "
X#define ADM59_MSG	"List continuously (TYPE, CAT)"
X#define ADM60_MSG	"Page (Mark end of page)"
X#define ADM61_MSG	"Page (Don't mark end of page)"
X#define ADM62_MSG	"Reading-Direction (OLD <> NEW)"
X#define ADM63_MSG	"Number of Screen-Lines (State-Line?)"
X#define ADM64_MSG	"Format of Article-\"Header\""
X#define ADM64aMSG	"Boards Survey (Number of Columns)"
X#define ADM64bMSG	"Converting German 'Umlauts'"
X#define ADM65_MSG	"Reading-Direction OLD -> NEW"
X#define ADM66_MSG	"Reading-Direction NEW -> OLD"
X#define ADM67_MSG	"Number of Screen-Lines: 24 (State-Line; ProComm etc.)"
X#define ADM68_MSG	"Number of Screen-Lines: 25 (no State-Line)"
X#define ADM68aMSG	"Number of Screen-Lines: 45 (experimental)"
X#define ADM69_MSG	"Original Article-\"Header\" (Total)"	
X#define ADM70_MSG	"Short Output (Author, Subject, Date)"
X#define ADM70aMSG	"Output in two-column Format"
X#define ADM70bMSG	"Output in three Columns"
X#define ADM70cMSG	"Output in four Columns"
X#define ADM70dMSG	"ISO-8859-1 (Amiga, german Keyboard)"
X#define ADM70eMSG	"IBMs german Charset"
X#define ADM70fMSG	"Converting to Substitutes"
X#define ADM70gMSG	"Don't convert anything"
X#define ADM71_MSG	" Administration (Address) "
X#define ADM72_MSG	"At this point, you are able to change ALL personal data (including your"
X#define ADM73_MSG	"Username). To get permission to send NEWS-Articles and external mails,"
X#define ADM74_MSG	"your name and address have to be specified." 
X#define ADM75_MSG	"If the old entries are still correct, you have to use the <ENTER>-key to"
X#define ADM76_MSG	"leave them uncorrected. Otherwise you may enter the new data."
X#define ADM77_MSG	" Administration (Password) "
X#define ADM78_MSG	"New Password:"
X#define ADM79_MSG	"You have to enter more than four characters!" 
X#define ADM80_MSG	"Again, please:"
X#define ADM81_MSG	"<- not identical!!!"
X#define ADM82_MSG	" Administration (Intro) "
X#define ADM83_MSG	"State & intro message"
X#define ADM84_MSG	"State message"
X#define ADM85_MSG	"Intro message"
X#define ADM86_MSG	"No message"
X#define ADM87_MSG	" Administration (Scanner) "
X#define ADM88_MSG	"Date & time of last login are checked"
X#define ADM89_MSG	"Only date is checked"
X#define ADM90_MSG	"Change date & time"
X#define ADM91_MSG	"Everytime the system was assigned to show \"new\" information, "
X#define ADM92_MSG	"it checks the \"date of your last login\" to find out what is new. This date"
X#define ADM93_MSG	"you may change now. The number of \"new\" articles grows more, if you"
X#define ADM94_MSG	"count back further ..."
X#define ADM95_MSG	"New date:"
X#define ADM96_MSG	"New time:"
X#define ADM97_MSG	"Reorganizing"
X
X
X/* ?? befehl.c */
X
X/* bled.c */
X
X#define BLD01_MSG	"Wrong line."
X#define BLD02_MSG	"Transfer starts. (Cancel with CTRL-X !)"
X#define BLD03_MSG	"Syntax error."
X#define BLD04_MSG	"Commands"
X#define BLD05_MSG	".l [LINE]|[FROM,TO]    list"
X#define BLD06_MSG	".L [LINE]|[FROM,TO]    list (don't show line numbers)"
X#define BLD07_MSG	".i AT                  insert"
X#define BLD08_MSG	".a                     append (stops insert mode)"
X#define BLD09_MSG	".c LINE                correct"
X#define BLD10_MSG	".d [LINE]|[FROM,TO]    delete"	
X#define BLD11_MSG	".u                     upload (ASCII text)"
X#define BLD12_MSG	".q                     quit (don't save)"
X#define BLD13_MSG	".h                     help (long text)"
X#define BLD14_MSG	".                      save & quit"
X#define BLD15_MSG	"LINE, FROM, TO, AT are legal line numbers."
X#define BLD16_MSG	"Statements in [brackets] are optional. If there"
X#define BLD17_MSG	"are no values specified: AT=1, FROM=1, TO=32000."
X#define BLD18_MSG	"Help"
X#define BLD19_MSG	"Break. File NOT saved."
X#define BLD20_MSG	"Command not known."
X#define BLD21_MSG	"Process terminated. File saved."
X#define BLD22_MSG	"No file specified."	
X#define BLD23_MSG	"Wait a while ..."
X#define BLD24_MSG	"File"
X#define BLD25_MSG	"contains non-ASCII characters."
X#define BLD26_MSG	"New file."
X#define BLD27_MSG	"File contains"
X#define BLD28_MSG	"lines"	
X#define BLD29_MSG	"Problems ..."
X#define BLD30_MSG	"That's all ..."
X
X
X/* control.c */
X
X#define CTL01_MSG	"Error in errorhandler!!!"
X
X
X/* ?? coreleft.c */
X
X/* ?? ctrlx.c */
X
X/* derror.c */
X
X#define DER01_MSG	"ERROR:"
X#define DER02_MSG	"Error:"
X#define DER03_MSG	"break"
X
X
X/* dis.c */
X
X#define DIS01_MSG	" We are involved in the following discussions: "
X#define DIS02_MSG	"Newsgroup/Board                  Subject                Msg-ID     Date"
X#define DIS03_MSG	"No entries at all."
X#define DIS04_MSG	"Maybe this discussion is yet out of date."
X#define DIS05_MSG	"Start at article no."
X#define DIS06_MSG	"Subject"
X
X
X/* games.c */
X
X#define GA01_MSG	" Onlinegames (Some using ANSI Codes) "
X#define GA02_MSG	"[Games] Which?"
X#define GA03_MSG	"<- Ok, don't play!"
X
X
X/* ?? getch.c */
X
X/* ?? getline.c */
X
X/* help.c */
X
X#define HLP01_MSG	" Helpfunctions (For ix/MBox only) "
X
X
X/* intro.c */
X
X#define INT01_MSG	"Organisation:"
X#define INT02_MSG	"BBS-Software:"
X#define INT03_MSG	"Mailbox-Name:"
X#define INT04_MSG	"Choose a terminal:"
X#define INT05_MSG	"1 - ANSI      2 - VT100      3 - VT52      4 - DUMP      5 - COLOR-ANSI"
X#define INT06_MSG	"Terminal?"
X#define INT07_MSG	"---  Your process was terminated  ---"
X#define INT08_MSG	"User"
X#define INT09_MSG	"logged in"
X#define INT10_MSG	"Login"
X#define INT11_MSG	"Initializing"
X#define INT12_MSG	"That's your"
X#define INT13_MSG	"call to this BBS; On"
X#define INT14_MSG	"you were in last"
X#define INT15_MSG	"There are"
X#define INT16_MSG	"boards with new articles and your mailbox contains"
X#define INT17_MSG	"mails"
X#define INT18_MSG	"Hey, todays your birthday ... yet noticed?"
X#define INT19_MSG	"So I wish you a \"Happy Birthday\" !!!"
X#define INT20_MSG	"MERRY XMAS, and best of holidays to you!"
X#define INT21_MSG	"May Santa Claus bring the \"right\" presents ..."
X#define INT22_MSG	""
X#define INT23_MSG	""
X#define INT24_MSG	"Puhh ... the year is gone at least ..."
X#define INT25_MSG	"So have a nice new one !!!"
X#define INT26_MSG	"There he is, the"
X#define INT27_MSG	"st caller !!!"
X#define INT28_MSG	"Your account for special access rights will be cancled at"
X#define INT29_MSG	"!"
X#define INT30_MSG	"PAY YOUR BILL AS SOON AS POSSIBLE!"
X
X
X/* lesen2.c */
X
X#define LE201_MSG	"Article"
X#define LE202_MSG	"Article:"
X#define LE203_MSG	"<- Can't find that article!"
X#define LE204_MSG	"<- No new articles in here!"
X#define LE205_MSG	"Directory"
X#define LE206_MSG	"Sorry, no new articles ..."
X#define LE207_MSG	"But there are still"
X#define LE208_MSG	"older entries."
X#define LE209_MSG	"And there ain't no older entries, either."
X#define LE210_MSG 	"In this board, there are"
X#define LE211_MSG	"older articles."
X#define LE212_MSG	"In this board, there are no older articles."
X#define LE213_MSG	"<- Can't find that article!"
X#define LE214_MSG	"No corresponding article found ..."
X
X
X/* loop.c */
X
X#define LOP01_MSG	"---  Break  ---"
X#define LOP02_MSG	"---  Your process was terminated  ---"	
X#define LOP03_MSG	"New mail arrived for you ..."
X#define LOP04_MSG	"Cmd:"
X#define LOP05_MSG	" Commandbuffer (1-9) "
X#define LOP06_MSG	"So what?"
X#define LOP07_MSG	"<- No, there couldn't be such stupid users!"
X#define LOP08_MSG	"Commands (At Level"
X#define LOP09_MSG	"Commands (Survey)"
X#define LOP10_MSG	"<- Ridiculous!"
X#define LOP11_MSG	"<- You have to add a command!"
X#define LOP12_MSG	"No help for command"
X#define LOP13_MSG	"available ..."
X#define LOP14_MSG	" Protocol (Calls) "
X#define LOP15_MSG	" Call  User                          Hometown         Terminal  Date      Time"
X#define LOP16_MSG	"No write authorization!"
X#define LOP17_MSG	"Definitions:"
X#define LOP18_MSG	"Date:"
X#define LOP19_MSG	"Time:"	
X#define LOP20_MSG	"Seconds"
X#define LOP21_MSG	"Reading-Directions:"
X#define LOP22_MSG	"New -> Old"
X#define LOP22aMSG	"Old -> New"
X#define LOP23_MSG	" Statistics (NewsSystem) "	
X#define LOP24_MSG	"Date      Time       Boards  Bytes (Bb)     total: Boards  Articles  Bytes (kB)"
X#define LOP25_MSG	" Statistics (UUCP-Rates) "
X#define LOP26_MSG	" Statistics (Download) "
X#define LOP27_MSG	"Date         File                                         CPS     BPS  State"
X#define LOP27aMSG	" Statistics (Mailer XMD) "
X#define LOP27bMSG	"Date   Time    Reciever                        Subject"
X#define LOP28_MSG	"[END] Really?"
X#define LOP29_MSG	"Wait"
X#define LOP30_MSG	"<- Remember, you only have level"
X#define LOP31_MSG	"<- Command not known!"
X#define LOP32_MSG	" Statistics (Download/HITLIST) "
X#define LOP33_MSG	"DNLs   Files"
X#define LOP33aMSG	"Converting 'Umlauts' "
X#define LOP33bMSG	"on"
X#define LOP33cMSG	"off"
X#define LOP34_MSG	" Statistics (Calls per User) "
X#define LOP35_MSG	"Calls    User"
X#define LOP36_MSG	" Any key to stop! "
X
X
X/* mail.c */
X
X#define MAL01_MSG	"You need level"
X#define MAL02_MSG	"to send international mails ..."
X#define MAL03_MSG	"<- No receiver specified!"
X#define MAL04_MSG	"You need level"
X#define MAL05_MSG	"for mailing to external users ..."
X#define MAL06_MSG	"Transmission:"
X#define MAL07_MSG	"<No subject found>"
X#define MAL08_MSG	"Can't find external users address!"
X#define MAL09_MSG	"The user"
X#define MAL10_MSG	"doesn't \"live\" on this host!"
X#define MAL11_MSG	"Mail to"
X#define MAL12_MSG	"W, U, A"
X#define MAL13_MSG	'W'
X#define MAL14_MSG	'U'
X#define MAL15_MSG	'A'
X#define MAL16_MSG	"Write, Upload, reject & Abort"
X#define MAL17_MSG	"[Transfer-Protocol] A, X, Y, Z"
X#define MAL17aMSG	"ASCII (Text), [X-Modem], Y-Modem (Batch), Z-Modem"
X#define MAL18_MSG	'A'
X#define MAL19_MSG	'X'
X#define MAL20_MSG	'Y'
X#define MAL21_MSG	'Z'
X#define MAL22_MSG	"   From:"
X#define MAL23_MSG	"     To:"
X#define MAL23aMSG	"Copy to:"
X#define MAL24_MSG	"Subject:"
X#define MAL25_MSG	"It's not allowed to mail binaries! They will be rejected!"
X#define MAL26_MSG	"Please start transfer now ... cancel with CTRL-X!"
X#define MAL27_MSG	"No mail recieved. Job canceld ..."
X#define MAL28_MSG	"Nothing received!"
X#define MAL28aMSG	"W, A, C, E"
X#define MAL29_MSG	'W'
X#define MAL30_MSG	'A'
X#define MAL30aMSG	'R'
X#define MAL31_MSG	'C'
X#define MAL31aMSG	'E'
X#define MAL32_MSG	"Write & send, Abort, Continue, Edit header"
X#define MAL32aMSG	" Edit Header "
X#define MAL32bMSG	"Receiver"
X#define MAL32cMSG	"unknown!"
X#define MAL33_MSG	"Ok, no mail ..."
X#define MAL34_MSG	"Mail canled!"
X#define MAL35_MSG	"Wait a while ..."
X#define MAL36_MSG	"that's all!"
X#define MAL37_MSG	"sent"
X#define MAL38_MSG	"The current \"hello\" message:"
X#define MAL39_MSG	"[MESSAGE] change?"
X#define MAL40_MSG	"The current signature:"
X#define MAL41_MSG	"[SIGNATURE] change?"
X
X
X/* main.c */
X
X#define MAI01_MSG	"Updating account"
X#define MAI02_MSG	"Connection closed ..."
X#define MAI03_MSG	" Administration (Setup UDBASE) "
X#define MAI04_MSG	"Can't find users DATABASE. Therefore a DATABASE will be established auto-"
X#define MAI05_MSG	"matically. The necessary stuff will be found in 'mbox.h' (have a look there)."
X#define MAI06_MSG	""
X#define MAI07_MSG	"These new DATABASE has to be checked with the command 'admin', or may be" 
X#define MAI08_MSG	"rebuild by deleting the DATABASE - don't forget to change the entries in" 
X#define MAI09_MSG	"'mbox.h' (read the TUTORIAL)."
X#define MAI10_MSG       "The DATABASE is usable now. Please restart \"ix/Mbox\" ..."
X#define MAI11_MSG	"Bye, bye, ..."
X
X
X/* makro.c */
X
X#define MAK01_MSG	"The following macros are declared:"
X#define MAK02_MSG	"[MACROS] Change?"
X#define MAK03_MSG	"Macro declared."
X#define MAK04_MSG	"<- Error in macro declaration!"
X
X
X/* mb-daemon.c */
X
X#define MBD01_MSG	"New articles"
X#define MBD02_MSG	"Yet scanned articles"
X#define MBD03_MSG	"Today there are"
X#define MBD04_MSG	"new borads with"
X#define MBD05_MSG	"kbytes"
X#define MBD06_MSG	"In total"
X#define MBD07_MSG	"groups there are"
X#define MBD08_MSG	"articles with"
X#define MBD09_MSG	"kbytes"
X
X/* ?? mbrsh.c */
X
X/* misc.c */
X
X#define MIS01_MSG	"<- No new boards available."
X#define MIS02_MSG	"is not a NEWSGROUP!"
X#define MIS02aMSG	"Not allowed! (See: \"Followup-To:\")"
X#define MIS03_MSG	"     From:"
X#define MIS04_MSG	"       To:"	
X#define MIS05_MSG	"  Subject:"
X#define MIS06_MSG	" Keywords:"
X#define MIS07_MSG	"  Summary:"
X#define MIS08_MSG	"W, U, A"
X#define MIS09_MSG	'W'
X#define MIS10_MSG	'U'
X#define MIS11_MSG	'A'
X#define MIS12_MSG	"Write, Upload, reject & Abort"
X#define MIS13_MSG	"[Transfer-Protocol] A, [X], Y, Z"
X#define MIS14_MSG	"ASCII (Text), [X-Modem], Y-Modem (Batch), Z-Modem"
X#define MIS15_MSG	'A'
X#define MIS16_MSG 	'X'
X#define MIS17_MSG	'Y'
X#define MIS18_MSG	'Z'
X#define MIS19_MSG	"Please start transfer now ... cancel with CTRL-X!"
X#define MIS20_MSG	"Nothing received, no new article ..."
X#define MIS21_MSG	"Upload hasn't received data!"
X#define MIS22_MSG	"binaryfile"
X#define MIS23_MSG	"textfile"
X#define MIS24_MSG	"bytes of a"
X#define MIS25_MSG	"received"
X#define MIS26_MSG	"The effective transfer-rate was"
X#define MIS27_MSG	"W, A, C"
X#define MIS28_MSG	"W, A"
X#define MIS29_MSG	'W'
X#define MIS30_MSG	'A'
X#define MIS31_MSG	'C'
X#define MIS31aMSG	"E"
X#define MIS32_MSG	"Write & send, Abort, Continue, Edit header"	
X#define MIS33_MSG	"Write & send, Abort, Edit header"
X#define MIS34_MSG	"Writing ..."
X#define MIS35_MSG	"Ok, no new article ..."
X#define MIS36_MSG	"Article rejected!"
X#define MIS37_MSG	"Message to"
X#define MIS38_MSG	"sent"
X#define MIS38aMSG	" Edit Header "
X#define MIS39_MSG	"The new article will be available in 30 seconds."
X#define MIS40_MSG	"<- Options are not allowed ..."
X#define MIS41_MSG	"<- Wrong option  ..."
X#define MIS42_MSG	"Message:"
X#define MIS43_MSG	"Article"
X#define MIS44_MSG	"Message:"
X#define MIS45_MSG	"Personal message"
X#define MIS46_MSG	"A, R, S, D, N, P"
X#define MIS47_MSG	'A'
X#define MIS48_MSG  	'R'
X#define MIS49_MSG	'S'
X#define MIS50_MSG	'D'
X#define MIS51_MSG	'N'
X#define MIS52_MSG	'P'
X#define MIS53_MSG	"Abort, Reply, Show again, Delete, Next one, Previous one"
X#define MIS54_MSG	"[DELETE] really?"
X#define MIS55_MSG	"No more new articles in this board!"
X#define MIS56_MSG	"There are no older articles!"
X#define MIS57_MSG	" Reply in progress (Searching path etc. ...) "
X#define MIS58_MSG	"Wait a while ..."
X#define MIS59_MSG	"[REPLY] A, B"
X#define MIS60_MSG	"Send to Author or Board?"
X#define MIS61_MSG	'A'
X#define MIS62_MSG	'B'
X
X
X
X/* misc2.c */
X
X#define MI201_MSG	"<- Wrong option ..."
X#define MI202_MSG	"<- Not with level"
X#define MI203_MSG	"The index will be available in 30 seconds."
X#define MI204_MSG	"Board/Group:"
X#define MI204aMSG	"Description:"
X#define MI204bMSG	"Your personal maildrop"
X#define MI205_MSG	" Boards (Level"
X#define MI206_MSG	"No boards with new articles found ..."
X#define MI207_MSG	"Board"	
X#define MI208_MSG	
X#define MI209_MSG	
X#define MI210_MSG	"<- No access "
X#define MI211_MSG	"Building index"
X
X
X/* nerror.c */
X
X#define NER01_MSG	"ERROR:"
X#define NER02_MSG	"Error:"
X#define NER03_MSG	"break"
X
X
X/* pd.c */
X
X#define PD01_MSG	"Can't list this article. It contains an executable program."
X#define PD02_MSG	"Contents:"
X#define PD03_MSG	"[PROGRAM] Transmit?"
X#define PD04_MSG	
X#define PD05_MSG	
X#define PD06_MSG	'Q'
X#define PD07_MSG	"Transfer-Protocol"
X#define PD08_MSG	'A'
X#define PD09_MSG	'X'
X#define PD10_MSG	'Y'
X#define PD11_MSG	'Z'
X#define PD12_MSG	"ASCII (UUE), X-Modem, Y-Modem, Z-Modem"
X#define PD13_MSG	"Please start transfer now ... cancel with CTRL-X !"
X#define PD14_MSG	"Transfer probably (!) interrupted ..."
X#define PD15_MSG	"bytes transmitted"
X#define PD16_MSG	"The effective transfer-rate was"
X#define PD17_MSG	"BREAK"
X#define PD18_MSG	"State (UserID"
X#define PD19_MSG	"Address                    Alias(es)         Date of Birth    Telephone"
X#define PD20_MSG	"Terminal  Editor  Level  Bell  Prompt  More  Intro   Calls  Last Call"
X#define PD21_MSG	"Onlinetime (min. total)     Bytes (kB Upload)         Bytes (kB Download)"
X#define PD22_MSG	"UUCP-Adresse(es)                                      Accounted until"
X#define PD22aMSG	"Accounted until"
X#define PD23_MSG	"Subnet"
X#define PD24_MSG	"Bang"
X#define PD25_MSG	"Local"
X#define PD26_MSG	"Newsgroup(s)"
X#define PD27_MSG	" Statistics (Login) "
X#define PD28_MSG   	"Date         \"Daytime\"  \"Nightshift\"       Total    Diagram"
X#define PD29_MSG	"<Su>"
X#define PD30_MSG	"<Sa>"
X#define PD31_MSG	"Total       "
X#define PD32_MSG	"Diagram"
X#define PD33_MSG	"The line \"Total\" refers to the calls of the last"
X#define PD34_MSG	"days"
X#define PD35_MSG	"Transaktion failed! No such articles located."
X#define PD36_MSG	"Assembling articles. Wait"
X#define PD37_MSG	" Compressing/Archiving Tools "
X#define PD38_MSG	"Which?"
X#define PD39_MSG	"Wait"
X#define PD40_MSG	"NOTE: "
X#define PD41_MSG	"The files have to be packed before compressing!"
X#define PD42_MSG	"The archive"
X#define PD43_MSG	"contains"
X#define PD44_MSG	"Bytes"
X#define PD45_MSG	"Only the articles from"
X#define PD46_MSG	"upto"
X#define PD47_MSG	"have been copied!"
X
X
X/* portinfo.c */
X
X#define POR01_MSG	" Portinfo (external/internal) "
X#define POR02_MSG	"User                             Terminal   Login   Process"
X#define POR03_MSG	"Wait a moment"
X#define POR04_MSG	" Level (Survey) "
X#define POR05_MSG	"Option/Description         required level"
X#define POR06_MSG	"Visitor (Guest) ....................."
X#define POR07_MSG	"Write (internal Mail) ..............."
X#define POR08_MSG	"Write (external Mail) ..............."
X#define POR09_MSG	"Write (NEWS Articles) ..............."
X#define POR10_MSG	"Write (international Mail) .........."
X#define POR11_MSG	"Freeware (Download) ................."
X#define POR12_MSG	"Freeware (Upload) ..................."
X#define POR13_MSG	"OS-Shell ............................"
X#define POR14_MSG	"Administration (Postmaster) ........."
X#define POR15_MSG	"And we are on level"
X#define POR15aMSG	" List of Users "
X#define POR16_MSG	"User                            Last Call      Calls   Online   Level   Account"
X#define POR17_MSG	"Wait a while ..."
X#define POR18_MSG	"User                              Upload       Download      Online"
X#define POR18aMSG	"User                               ID     Account (until)"
X#define POR18bMSG	"User               ID  Level  Newsgroups"
X#define POR19_MSG	"Users with <?> mark should check their accounting-data (something is missing)."
X#define POR20_MSG	"All {-} entries will be deleted at next update."  
X#define POR21_MSG	"Momentary"
X#define POR22_MSG	"users are on this BBS. Thereof"
X#define POR23_MSG	"are regularly active."
X#define POR24_MSG	"And besides"
X#define POR25_MSG	"guests have looked around here."
X#define POR25aMSG	"Informations about the external user"
X#define POR25bMSG	"will be ordered on"
X#define POR25cMSG	"via UUCP"
X#define POR26_MSG	"Look for an answers in your mailbox the next days!"
X#define POR26aMSG	"Illegal DOMAIN-Address!"
X#define POR27_MSG	"User not known."
X#define POR28_MSG	"Userinformation"
X#define POR29_MSG	"       User-ID:"
X#define POR30_MSG	"      Username:"
X#define POR31_MSG	" Shell-Account:"
X#define POR32_MSG	"         Alias:"
X#define POR33_MSG	"      Internet:"
X#define POR34_MSG	"      Hometown:"
X#define POR35_MSG	"        Street:"
X#define POR36_MSG	"     Telephone:"
X#define POR37_MSG	" Date of Birth:"
X#define POR38_MSG	" Calls (total):"
X#define POR39_MSG	"     Last Call:"
X#define POR40_MSG	"   Time Online:"
X#define POR41_MSG	"day(s)"
X#define POR41aMSG	"hour(s)"
X#define POR41bMSG	"minute(s)"
X#define POR41cMSG	" Account until:"
X#define POR42_MSG       "        Upload:"
X#define POR43_MSG	"kByte(s)"
X#define POR44_MSG	"      Download:"
X#define POR45_MSG	"         Mails:"
X
X
X
X/* postfach.c */
X
X#define POS01_MSG	"<- Don't you think that one account is enough ?"
X#define POS02_MSG	
X#define POS03_MSG	"Guest"
X#define POS04_MSG	"User No.1"
X#define POS05_MSG	"User No.2"
X#define POS06_MSG	" Administration (Registration) "
X#define POS07_MSG	"Your personal data will be stored for administrative purpose!"
X#define POS08_MSG	"The sysop can't give any guarantees for the security of your data, because"
X#define POS09_MSG	"this hosts allows shell-accounting, too." 
X#define POS10_MSG	"First name and name (Username=Realname):"
X#define POS11_MSG	"Ok, ok, no account ..."
X#define POS12_MSG	"Checking ... wait a while, please ..."
X#define POS13_MSG	"yet accounted!!!"
X#define POS14_MSG	"                               Password:"
X#define POS15_MSG	"More than four characters!!!"
X#define POS16_MSG	"                  Alias (for UUCP etc.):"
X#define POS17_MSG	"                               Hometown:"
X#define POS18_MSG	"                                 Street:"
X#define POS19_MSG	"                      Telephone (VOICE):"
X#define POS20_MSG	"                       Telephone (DATA):"
X#define POS21_MSG	"                          Date of Birth:"
X#define POS22_MSG	"You now have an account and a maildrop on this host. As soon as your data"
X#define POS23_MSG	"is checked, your \"LEVEL\" will be raised."
X#define POS24_MSG	"New account for"
X#define POS24aMSG	"!You have to 'make world' first!"
X#define POS25_MSG	"Reorganizing"	
X#define POS26_MSG	"New user"
X
X
X/* show.c */
X
X#define SHO01_MSG
X#define SHO02_MSG
X#define SHO03_MSG
X#define SHO04_MSG	"MORE"
X#define SHO05_MSG	"Show again, Abort, Leave or use \"SPACE\"-bar to continue"
X#define SHO06_MSG	'L'
X#define SHO07_MSG	'X'
X#define SHO08_MSG	'Q'
X#define SHO09_MSG	'A'
X#define SHO10_MSG	'S'
X#define SHO11_MSG	"Repetition ..."
X#define SHO12_MSG	"Page"
X
X
X/* suchen.c */
X
X#define SUC01_MSG	"Searchpattern:"
X#define SUC02_MSG	"Ok, don't search!"
X#define SUC03_MSG	"Searching for"
X#define SUC04_MSG	"in"
X#define SUC05_MSG	"Wait a moment"
X#define SUC06_MSG	"No articles including pattern"	
X#define SUC07_MSG	"found."	
X#define SUC07aMSG	"Which article?"
X#define SUC08_MSG	"Your own mail ... WHY ???"
X#define SUC09_MSG	"No permissions!"
X#define SUC10_MSG	"Can't find that!"
X
X
X/* tools.c */
X
X#define TOL01_MSG	"Sunday"
X#define TOL02_MSG	"Monday"
X#define TOL03_MSG	"Tuesday"
X#define TOL04_MSG	"Wednesday"
X#define TOL05_MSG	"Thursday"
X#define TOL06_MSG	"Friday"
X#define TOL07_MSG	"Saturday"
X#define TOL08_MSG	"Wait a moment"
X
X
X/* weiterl.c */
X
X#define WEI01_MSG	"<- No messages stored."
X#define WEI02_MSG	"Stored message(s):"
X#define WEI03_MSG	"Subject:"
X#define WEI04_MSG	"<- Article not found!"
X
X
X/* xmd.c */
X
X#define XMD01_MSG	"Mail from an \"external\" user"
X#define XMD02_MSG	"---------  Message follows  ---------"
X
X
X/*  G L O B A L  */
X
X#define GBL01_MSG	"Author:"
X
X#define GBL02_MSG	"Date:"
X#define GBL03_MSG	"Subject:"
X
X#define GBL04_MSG	"Username:"
X#define GBL05_MSG	"No.   Subject                     Author                Date      Time   Lines"
X
X#define GBL06_MSG	'Y' 	/* YES !!!!! */
X#define GBL07_MSG	'N'	/* NO !!!!!! */
X
X#define GBL08_MSG	"No.   Subject                     Author                Date      Time   kBytes"
X#define GBL09_MSG	"Password:"
X
X#define GBL10_MSG	"guest"
END_OF_FILE
  if test 25566 -ne `wc -c <'src/mbox.english'`; then
    echo shar: \"'src/mbox.english'\" unpacked with wrong size!
  fi
  # end of 'src/mbox.english'
fi
if test -f 'src/tools.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'src/tools.c'\"
else
  echo shar: Extracting \"'src/tools.c'\" \(24683 characters\)
  sed "s/^X//" >'src/tools.c' <<'END_OF_FILE'
X/***************************************************************************/
X/*	    PROGRAMM  ix/Mbox						   */
X/*             DATEI  tools.c						   */
X/*        FUNKTIONEN  whoami(), tty(), stripped(), upcased(), length(),    */
X/*		      strcopy(), strcomp(), ansi2(), mydate(), mytime(),   */
X/*	              crypted(), dateconv(), datereconv(), timeconv(),     */
X/*		      timereconv(), maybe_locked(), num_stripped(),        */
X/*		      rename(), headline(), ttyna(), bigcopy(), mblock(),  */
X/*		      mbunlock(), shortname(), clearline(), isin()	   */
X/*		      termansi(), sgrep()				   */
X/*             AUTOR  vs (Volker Schuermann/MINIX-Version)		   */
X/*  LETZTE AENDERUNG  18.12.1992					   */
X/***************************************************************************/
X
X#include <sys/types.h>
X#include <sys/stat.h>
X#include <stdio.h>
X#include <unistd.h>
X#include <time.h>
X#include <pwd.h>
X
X#ifdef _SYS7
X#include <termcap.h>
X#endif
X
X
X#ifdef _MBOX
X#define EXTERN
X#include "mbox.h"
X#else
X#define VERSION "TOOLS.C"
X#define CR 13
X#define TOL01_MSG	"Sonntag"
X#define TOL02_MSG	"Montag"
X#define TOL03_MSG	"Dienstag"
X#define TOL04_MSG	"Mittwoch"
X#define TOL05_MSG	"Donnerstag"
X#define TOL06_MSG	"Freitag"
X#define TOL07_MSG	"Samstag"
X#define TOL08_MSG	"Momentchen"
X#endif
X#ifdef STRING
X#undef STRING
X#endif
X
X#ifdef LONGSTRING
X#undef LONGSTRING
X#endif
X
X#define STRING 81
X#define LONGSTRING 256
X
Xunsigned char headinfo[STRING];
X
X
X/***************************************************************************/
X/*      FUNKTION  whoami()						   */
X/*  BESCHREIBUNG  Name des eigenen SH-Accounts.		 		   */
X/*     PARAMETER  keine	                                                   */
X/*     RUECKGABE  siehe BESCHREIBUNG                                       */
X/***************************************************************************/
X
Xunsigned char *whoami()
X{
X  struct passwd *pw_entry;
X
X  pw_entry = getpwuid(getuid());
X
X  if (pw_entry->pw_uid < 0) return (unsigned char *) "OOPS";
X
X  return (unsigned char *) (pw_entry->pw_name);
X}
X
X
X
X
X/***************************************************************************/
X/*      FUNKTION  stripped()						   */
X/*  BESCHREIBUNG  STRING von fuehrenden und folgenden Leerzeichen be-      */
X/*		  freien.                                                  */
X/*     PARAMETER  st  =  STRING inclusive Leerzeichen                      */
X/*     RUECKGABE  STRING exclusive Leerzeichen                             */
X/***************************************************************************/
X
Xunsigned char *stripped(st)
Xunsigned char st[];
X{
X  static unsigned char s[STRING];
X
X  int i = 0, a = 0, b = 0, c = 0;
X
X  if (st[0] == '\0') return (unsigned char *) '\0';
X  if ((st[0] == 10) || (st[0] == 13)) return (unsigned char *) " ";
X
X  strcpy(s, st);
X
X  while ((s[i] < 33) && (s[i] != '\0')) i++;
X  a = i;
X  while (s[a] != '\0') a++;
X  a--;
X  while (s[a] < 33) a--;
X
X  for (c = i; c <= a; c++) {
X	s[b] = s[c];
X	b++;
X  }
X  s[b] = '\0';
X
X  return (unsigned char *) s;
X}
X
X
X
X
X
X/***************************************************************************/
X/*      FUNKTION  upcased()						   */
X/*  BESCHREIBUNG  Zeichen eines STRING auf Grossbuchstaben umstellen.	   */
X/*     PARAMETER  st  =  STRING mit Gross-/Kleinbuchstaben		   */
X/*     RUECKGABE  STRING in Grossbuchstaben                                */
X/***************************************************************************/
X
Xunsigned char *upcased(st)
Xunsigned char st[];
X{
X  static unsigned char s[STRING];
X
X  int i = 0;
X
X
X  strcpy(s, st);
X
X  while (s[i] != '\0') {
X	if (s[i] > 96) s[i] -= 32;
X	i++;
X  }
X
X  return (unsigned char *) s;
X}
X
X
X
X
X
X/***************************************************************************/
X/*      FUNKTION  length()						   */
X/*  BESCHREIBUNG  Laenge eines STRING ermitteln (ja, ja, "strlen" ...)	   */
X/*     PARAMETER  st  =  STRING                                            */
X/*     RUECKGABE  Laenge des STRING                                        */
X/***************************************************************************/
X
Xint length(st)
Xunsigned char st[];
X{
X  int i = 0;
X
X  while (st[i] != '\0') i++;
X
X  return i;
X}
X
X
X
X
X/***************************************************************************/
X/*      FUNKTION  strcopy()						   */
X/*  BESCHREIBUNG  Einen TeilSTRING aus einem STRING herausschneiden.       */
X/*     PARAMETER  st  =  STRING                                            */
X/*		  v   =  von Zeichen (1. Zeichen = 0 !!!)		   */
X/*		  b   =  bis Zeichen				           */
X/*     RUECKGABE  TeilSTRING                                               */
X/***************************************************************************/
X
Xunsigned char *strcopy(st, v, b)
Xunsigned char st[];
Xint v, b;
X{
X  static unsigned char s[STRING];
X
X  int i = 0, j;
X
X
X  strcpy(s, st);
X
X  if (length(s) < b) b = length(s);
X
X  for (j = v; j <= b; j++) {
X	s[i] = s[j];
X	i++;
X  }
X  s[i] = '\0';
X
X  return (unsigned char *) s;
X}
X
X
X/***************************************************************************/
X/*      FUNKTION  bigcopy()						   */
X/*  BESCHREIBUNG  Einen TeilLONGSTRING aus LONGSTRING herausschneiden.     */
X/*     PARAMETER  st  =  LONGSTRING                                        */
X/*		  v   =  von Zeichen (1. Zeichen = 0 !!!)		   */
X/*		  b   =  bis Zeichen				           */
X/*     RUECKGABE  TeilLONGSTRING                                           */
X/***************************************************************************/
X
Xunsigned char *bigcopy(st, v, b)
Xunsigned char st[];
Xint v, b;
X{
X  static unsigned char s[LONGSTRING];
X
X  int i = 0, j;
X
X
X  strcpy(s, st);
X
X  if (length(s) < b) b = length(s);
X
X  for (j = v; j <= b; j++) {
X	s[i] = s[j];
X	i++;
X  }
X  s[i] = '\0';
X
X  return (unsigned char *) s;
X}
X
X
X
X
X/***************************************************************************/
X/*      FUNKTION  strcomp()						   */
X/*  BESCHREIBUNG  Zwei STRINGs vergleichen. Und zwar genau solange, bis    */
X/*		  bei STRING1 das Ende ('\0') erreicht ist !!!             */
X/*                Gross-/Kleinschreibung wird dabei IGNORIERT !!!          */
X/*     PARAMETER  st  =  STRING1                                           */
X/*	          tt  =  STRING2                                           */
X/*     RUECKGABE  Anzahl der UNGLEICHEN Zeichen                            */
X/***************************************************************************/
X
Xint strcomp(s, t)
Xunsigned char s[], t[];
X{
X  int i = 0, a = 0;
X  int s1, t1;
X
X  while (s[i] != '\0') {
X	s1 = s[i];
X	t1 = t[i];
X	if ((t1 > 96) && (t1 < 123)) t1 -= 32;
X	if ((s1 > 96) && (s1 < 123)) s1 -= 32;
X	if (t1 != s1) a++;
X	i++;
X  }
X  return a;
X}
X
X
X/***************************************************************************/
X/*      FUNKTION  ansi2()						   */
X/*  BESCHREIBUNG  TERMCAP-Eintrag fuer ein Terminal in "buf" einlesen,     */
X/*		  und angeforderte Sequenzen finden & ausgeben.            */
X/*     PARAMETER  code  =  'INIT'  =  Eintrag holen und speichern	   */
X/*		  	           =  Sequenz finden & ausgeben            */
X/*     RUECKGABE  -1  =  Terminal nicht gefunden                           */
X/*		   1  =  Sequenz nicht gefunden				   */
X/***************************************************************************/
X
Xstatic unsigned char buf[1024];
X
Xint ansi(code)
Xunsigned char code[];
X{
X  ansi2(code, 0, 0);
X}
X
Xint ansi2(code, x, y)
Xunsigned char code[];
Xint x, y;
X{
X  unsigned char *getenv();
X  static unsigned char s[STRING];
X  unsigned char *p = s;
X  unsigned char *term;
X
X#ifdef _MBOX
X  term = TERMINAL;
X#else
X  term = getenv("TERM");
X#endif
X
X  if ((x == -1) && (y == -1)) {
X	if (tgetent(buf, code) != 1) return -1;
X  }
X  if (strcomp("INIT", code) == 0) {
X	if (tgetent(buf, term) != 1) return -1;
X  }
X  if (strcomp("cm", code) == 0) {
X	if (tgetstr(code, &p) == 0) return 1;
X	printf("%s", (unsigned char *) tgoto( s, (x -1), (y -1) ));
X	return 0;
X  }
X  else{
X	if (tgetstr(code, &p) == 0) return 1;
X  }
X
X  printf("%s", s);
X
X  return 0;
X}
X
Xunsigned char *termansi(code)
Xunsigned char code[];
X{
X  unsigned char *getenv();
X  unsigned char s[STRING];
X  unsigned char *p = s;
X  unsigned char *term;
X
X#ifdef _MBOX
X  term = TERMINAL;
X#else
X  term = getenv("TERM");
X#endif
X
X  if (strcomp("INIT", code) == 0) {
X	if (tgetent(buf, term) != 1) return (unsigned char *) '\0';
X  }
X  if (tgetstr(code, &p) == 0) return (unsigned char *) '\0';
X
X  return (unsigned char *) s;
X}
X
X
X
X/***************************************************************************/
X/*      FUNKTION  mydate()						   */
X/*  BESCHREIBUNG  Tagesdatum liefern.  					   */
X/*     PARAMETER  mode  =  0  =  tt.mm.yyyy				   */
X/*			   1  =  tt.mm.yy				   */
X/*			   2  =  ttt					   */	
X/*     RUECKGABE  Datum                                                    */
X/***************************************************************************/
X
X#define TZS      1
X
Xunsigned char *mydate(mode)
Xint mode;
X{
X  struct tm *tp;
X  time_t tt;
X  unsigned char wt[8][11];
X
X  static unsigned char s[STRING];
X
X#ifndef _MBOX
X  strcpy(wt[0], "Sonntag");
X  strcpy(wt[1], "Montag");
X  strcpy(wt[2], "Dienstag");
X  strcpy(wt[3], "Mittwoch");
X  strcpy(wt[4], "Donnerstag");
X  strcpy(wt[5], "Freitag");
X  strcpy(wt[6], "Samstag");
X#else
X  strcpy(wt[0], TOL01_MSG);
X  strcpy(wt[1], TOL02_MSG);
X  strcpy(wt[2], TOL03_MSG);
X  strcpy(wt[3], TOL04_MSG);
X  strcpy(wt[4], TOL05_MSG);
X  strcpy(wt[5], TOL06_MSG);
X  strcpy(wt[6], TOL07_MSG);
X#endif
X
X  time(&tt);
X  tp = localtime(&tt);
X  if (mode == 0) {
X	sprintf(s, "%02.2d.%02.2d.%04.4d", tp->tm_mday, tp->tm_mon + TZS, 1900 + tp->tm_year);
X  }
X  if (mode == 1) {
X	sprintf(s, "%02.2d.%02.2d.%02.2d", tp->tm_mday, tp->tm_mon + TZS, tp->tm_year);
X  }
X  if (mode == 2) {
X	sprintf(s, "%s", wt[tp->tm_wday]);
X  }
X  return (unsigned char *) s;
X}
X
X
X
X
X/***************************************************************************/
X/*      FUNKTION  mytime()						   */
X/*  BESCHREIBUNG  Tageszeit liefern.  					   */
X/*     PARAMETER  mode  =  0  =  hh:mm:ss				   */
X/*			   1  =  hh:mm	 				   */
X/*     RUECKGABE  Zeit                                                     */
X/***************************************************************************/
X
Xunsigned char *mytime(mode)
Xint mode;
X{
X  struct tm *tp;
X  time_t tt;
X
X  static unsigned char s[STRING];
X
X  time(&tt);
X  tp = localtime(&tt);
X  sprintf(s, "%02.2d:%02.2d:%02.2d", tp->tm_hour, tp->tm_min, tp->tm_sec);
X
X  if (mode == 1) s[5] = '\0';
X
X  return (unsigned char *) s;
X}
X
X
X
X
X/***************************************************************************/
X/*      FUNKTION  crypted()						   */
X/*  BESCHREIBUNG  STRING verschluesseln und zurueckgeben.		   */
X/*     PARAMETER  s  =  STRING                                             */
X/*     RUECKGABE  Verschluesselter STRING                                  */
X/***************************************************************************/
X
Xunsigned char *crypted(s)
Xunsigned char s[];
X{
X  static unsigned char t[STRING];
X  int i, a;
X
X
X  strcpy(t, s);
X  i = 0;
X  a = 2;
X  while (t[i] != '\0') {
X	t[i] = (t[i] / a) + 32;
X	i++;
X	a++;
X	if (a > 5) a = 2;
X  }
X
X  return (unsigned char *) t;
X}
X
X
X
X
X/***************************************************************************/
X/*      FUNKTION  dateconv() 						   */
X/*  BESCHREIBUNG  Datum (STRING) in Datum (LONG) wandeln.		   */
X/*     PARAMETER  d  =  Datum (STRING)                                     */
X/*     RUECKGABE  Datum (LONG)                                             */
X/***************************************************************************/
X
Xlong dateconv(d)
Xunsigned char d[];
X{
X  unsigned char s[STRING];
X  int a, b, i;
X
X
X  strcpy(s, (unsigned char *) strcopy(d, 0, 1));
X  a = atoi(s);
X  strcpy(s, (unsigned char *) strcopy(d, 3, 4));
X  b = atoi(s);
X  strcpy(s, (unsigned char *) strcopy(d, 6, 9));
X  i = atoi(s);
X  if (i < 1900) i += 1900;
X
X  sprintf(s, "%4.4d%02.2d%02.2d", i, b, a);
X
X  return atol(s);
X}
X
X
X
X/***************************************************************************/
X/*      FUNKTION  datereconv() 						   */
X/*  BESCHREIBUNG  Datum (LONG) in Datum (STRING) wandeln.		   */
X/*     PARAMETER  l  =  Datum (LONG)                                       */
X/*     RUECKGABE  Datum (STRING)                                           */
X/***************************************************************************/
X
Xunsigned char *datereconv(l)
Xlong l;
X{
X  static unsigned char s[STRING];
X  static unsigned char t[STRING];
X
X
X  if (l < 19000000)
X	sprintf(s, "%ld", 1900000L + l);
X  else
X	sprintf(s, "%ld", l);
X
X  strcpy(t, (unsigned char *) strcopy(s, 6, 7));
X  strcat(t, ".");
X  strcat(t, (unsigned char *) strcopy(s, 4, 5));
X  strcat(t, ".");
X  strcat(t, (unsigned char *) strcopy(s, 0, 3));
X
X  return (unsigned char *) t;
X}
X
X
X
X/***************************************************************************/
X/*      FUNKTION  timeconv() 						   */
X/*  BESCHREIBUNG  Zeit (STRING) in Zeit (LONG) wandeln.			   */
X/*     PARAMETER  t  =  Zeit (STRING)                                      */
X/*     RUECKGABE  Zeit (LONG)                                              */
X/***************************************************************************/
X
Xint timeconv(t)
Xunsigned char t[];
X{
X  unsigned char s[STRING];
X  int i = 0;
X
X
X  strcpy(s, (unsigned char *) strcopy(t, 0, 1));
X  i = 100 * atoi(s);
X  strcpy(s, (unsigned char *) strcopy(t, 3, 4));
X  i += atoi(s);
X
X  return i;
X}
X
X
X
X
X/***************************************************************************/
X/*      FUNKTION  timereconv() 						   */
X/*  BESCHREIBUNG  Zeit (LONG) in Zeit (STRING) wandeln.			   */
X/*     PARAMETER  i  =  Zeit (LONG)                                        */
X/*     RUECKGABE  Zeit (STRING)                                            */
X/***************************************************************************/
X
Xunsigned char *timereconv(i)
Xint i;
X{
X  static unsigned char s[STRING];
X  static unsigned char t[STRING];
X
X
X  if (i < 10000)
X	sprintf(s, "%04.4d00", i);
X  else
X	sprintf(s, "%06.6d", i);
X
X  strcpy(t, (unsigned char *) strcopy(s, 0, 1));
X  strcat(t, ":");
X  strcat(t, (unsigned char *) strcopy(s, 2, 3));
X  strcat(t, ":");
X  strcat(t, (unsigned char *) strcopy(s, 4, 5));
X
X  return (unsigned char *) t;
X}
X
X
X
X/***************************************************************************/
X/*      FUNKTION  shortname() 						   */
X/*  BESCHREIBUNG  Wandelt lange Namen (NGs) ins 14-Zeichenformat, um Ver-  */
X/*                Wechslungen zu vermeiden:				   */
X/*									   */
X/*		      comp.protocols.tcp-ip.sources.wanted		   */
X/*                =>  com0ces.wanted					   */
X/*							                   */
X/*     PARAMETER  longname : langer Name                                   */
X/*									   */
X/*   									   */
X/*     RUECKGABE  s : kurzer Name                                          */
X/***************************************************************************/
X
Xunsigned char *shortname( longname )
Xunsigned char longname[];
X{
X  unsigned char s[STRING];
X  unsigned char t[STRING];
X
X  int i = 0, j = 0;
X
X  strcpy(s, longname);
X
X  strcpy(t, longname);
X
X  while(s[i] != '\0'){
X	if(s[i] == '/') j = i + 1;
X	i++;
X  }
X
X  i = strlen(t);
X
X  if((i - j) < 15) return (unsigned char *) s;
X
X  s[j + 3] = '0'; s[j + 4] = '\0';
X  strcat(s, (unsigned char *) strcopy(t, (i-10), i));
X
X  return (unsigned char *) s;
X}
X
X
X
X
X
X/***************************************************************************/
X/*      FUNKTION  maybe_locked()					   */
X/*  BESCHREIBUNG  Um sicherzustellen das eine Datei, die eigentlich vor-   */
X/*		  handen sein MUSS, wirklich nicht da ist (und nicht nur   */
X/*		  gerade von einem anderen Task benutzt wird), verzoegert  */
X/*		  diese Funktion die Fehlermeldung um eine festgelegte     */
X/*		  Zeitspanne.                                              */
X/*     PARAMETER  name  =  Dateiname				           */
X/*		  mode  =  Zugriffsmodus (sollte NICHT verwendet werden !) */
X/*     RUECKGABE   0    =  Datei erreichbar				   */
X/*		  -1    =  Datei nicht verfuegbar			   */
X/***************************************************************************/
X
Xint maybe_locked(name, mode)
Xunsigned char name[], mode[];
X{
X  FILE *fp;
X  int i = 0, LCK = 0;
X  unsigned char s[STRING];
X
X  sprintf(s, "%s.LCK", name);
X
X#ifndef _LONGNAMES
X  strcpy(s, (unsigned char *) shortname(s));
X#endif
X
X  TRY_TWICE:
X
X  fp = NULL;
X
X  do {
X	if(fp != NULL) fclose(fp);
X	fp = fopen(s, "r");
X	i++;
X	if (fp != NULL) {
X		if(i == 1) printf("%c%s ", CR, TOL08_MSG);
X		printf(".");
X		sleep(3);
X	}
X  } while ((i < 8) && (fp != 0));
X
X  if(fp != 0){
X	fclose(fp);
X#ifdef _MBOX
X	mbunlock(name);  /* <--- DAS IST NATUERLICH NICHT KORREKT !!! */
X	goto TRY_TWICE;  /* <--- DAS AUCH NICHT !!! */
X	nerror("tools.c", 566, "maybe_locked", "Datei gesperrt", name);	
X#else
X	printf("\n\nDatei >>%s<< gesperrt !!!\n\n", name);
X#endif
X	exit( -1 );
X  }
X
X  i = 0;
X
X  do {
X	fp = fopen(name, "r");	/* "r" => "mode", aber VORSICHT ! */
X	i++;
X	if (fp == NULL) {
X		if(i == 1) printf("%c%s ", CR, TOL08_MSG);	
X		printf(".");
X		sync();
X		sleep(3);
X	}
X  } while ((i < 5) && (fp == NULL));
X
X  if (fp == NULL) return -1;
X
X  fclose(fp);
X  return 0;
X}
X
X
X
X
X
X/***************************************************************************/
X/*      FUNKTION  num_stripped()					   */
X/*  BESCHREIBUNG  Entfernt alle Ziffern aus STRING.			   */
X/*     PARAMETER  s  =  STRING (incl. Ziffern)				   */
X/*     RUECKGABE  STRING (excl. Ziffern)				   */
X/***************************************************************************/
X
Xunsigned char *numstripped(s)
Xunsigned char s[];
X{
X  static unsigned char t[STRING];
X  int i = 0, a = 0;
X
X  while (s[i] != '\0') {
X	if (((s[i] > 64) && (s[i] < 127)) || (s[i] == ' ') || (s[i] == '-')) {
X		t[a] = s[i];
X		a++;
X	}
X	i++;
X  }
X  t[a] = '\0';
X
X  return (unsigned char *) t;
X}
X
X
X
X
X/***************************************************************************/
X/*      FUNKTION  rename()						   */
X/*  BESCHREIBUNG  Benennt Datei1 in Datei2 um (ok, gelogen ... Datei1 wird */
X/*		  in Datei2 kopiert).                                      */
X/*     PARAMETER  alt  =  Datei1                                           */
X/*		  neu  =  Datei2                                           */
X/*     RUECKGABE   0   =  ok                                               */
X/*		  -1   =  Datei1 nicht gefunden				   */
X/***************************************************************************/
X
X#ifndef _ANSI
X
Xint rename(alt, neu)
Xunsigned char *alt[], *neu[];
X{
X  FILE *fp;
X  FILE *ff;
X
X  unsigned char s[250];
X
X  fp = fopen(neu, "w");
X  if (fp == NULL) {
X	return -1;
X  }
X  ff = fopen(alt, "r");
X  if (ff == NULL) {
X	return -2;
X  }
X  while (fgets(s, 250, ff) != NULL) {
X	fputs(s, fp);
X  }
X
X  fclose(fp);
X  fclose(ff);
X
X  unlink(alt);
X
X  return 0;
X}
X
X#endif
X
X
X
X
X/***************************************************************************/
X/*      FUNKTION  headline()						   */
X/*  BESCHREIBUNG  Ueberschrift mit Ansage-Text ausgeben. Vorher wird der   */
X/*		  der Bildschirm geloescht (falls moegliche) und auf	   */
X/*		  negative Darstellung umgeschaltet.                       */
X/*     PARAMETER  line  =  Ansage-Text					   */
X/*     RUECKGABE  keine                                                    */
X/***************************************************************************/
X
Xvoid headline(line)
Xunsigned char line[];
X{
X  unsigned char ex[255];
X  int i;
X
X
X  strcpy(ex, line);
X  i = 0;
X  while(line[i] != '\0'){
X	if(line[i] == '^'){
X		strcpy(ex, (unsigned char *) strcopy(line, 0, (i-1)));
X		line[i] = ' ';
X	}
X	i++;
X  }
X  strcpy(headinfo, ex);
X  sprintf(ex, "%s                                                                          ", line);
X  ex[79] = '\0';
X  if (ansi("cl") != -1) {
X	if (ansi("mr") == 1) {
X		if (ansi("so") == 1) { 
X			printf("\n\n------  %s  ------\n\n", line);
X			return;
X		}
X	}
X	printf("%s\n", ex);
X	if (ansi("me") == 1) {
X		ansi("se");
X	}
X  }
X  else {
X	printf("\n\n\n\n\n------  %s  ------\n\n", line);
X  }
X}
X
X
X/***************************************************************************/
X/*      FUNKTION  mblock()						   */
X/*  BESCHREIBUNG  Schuetzt eine Datei vor ALLEN Zugriffen		   */
X/*     PARAMETER  path  =  Datei					   */
X/*     RUECKGABE  keine                                                    */
X/***************************************************************************/
X
Xvoid mblock( path )
Xunsigned char path[];
X{
X  FILE *fp;
X  unsigned char s[STRING];
X
X  sprintf(s, "%s.LCK", path); 
X
X#ifndef _LONGNAMES
X  strcpy(s, (unsigned char *) shortname(s));
X#endif
X
X  fp = fopen( s, "w" );
X  fputs(VERSION, fp);
X  fclose(fp);
X}
X
X
X/***************************************************************************/
X/*      FUNKTION  unmblock()						   */
X/*  BESCHREIBUNG  Erlaubt Zugriffe auf eine Datei			   */
X/*     PARAMETER  path  =  Datei					   */
X/*     RUECKGABE  keine                                                    */
X/***************************************************************************/
X
Xvoid mbunlock( path )
Xunsigned char path[];
X{
X  unsigned char s[STRING];
X  
X  sprintf(s, "%s.LCK", path); 
X
X#ifndef _LONGNAMES
X  strcpy(s, (unsigned char *) shortname(s));
X#endif
X
X  unlink(s);
X}
X
X
X/***************************************************************************/
X/*      FUNKTION  tty()							   */
X/*  BESCHREIBUNG  Name des eigenen Terminal-Anschlusses. 		   */
X/*     PARAMETER  keine	                                                   */
X/*     RUECKGABE  siehe BESCHREIBUNG                                       */
X/***************************************************************************/
X
Xint tty()
X{
X  unsigned char s[STRING];
X  unsigned char t[STRING];
X  int i, l, a, b;
X
X
X  strcpy(s, (unsigned char *) ttyname(0));
X  l = length(s);
X  i = l;
X
X  while ((s[l] != 'y') && (l > 0)) l--;
X
X  l++;
X  a = 0;
X
X  for (b = l; b < i; b++) {
X	t[a] = s[b];
X	a++;
X  }
X  t[a] = '\0';
X
X  return atoi(t);
X}
X
X
X/***************************************************************************/
X/*      FUNKTION  ttyna()						   */
X/*  BESCHREIBUNG  Name des eigenen Terminal-Anschlusses. 		   */
X/*     PARAMETER  keine	                                                   */
X/*     RUECKGABE  siehe BESCHREIBUNG                                       */
X/***************************************************************************/
X
Xunsigned char *ttyna()
X{
X  static unsigned char s[STRING];
X  static unsigned char t[STRING];
X  int i, j, l;
X
X
X  strcpy(s, (unsigned char *) ttyname(0));
X
X  l = length(s) + 1;
X
X  i = 0; 
X  while(s[i] != '\0'){
X	if(s[i] == '/') j = i + 1;
X	i++;
X  }
X  (void) strcpy(t, (unsigned char *) strcopy(s, j, l));
X  
X  return (unsigned char *) t;
X}
X
X
X
X/***************************************************************************/
X/*      FUNKTION  clearline()						   */
X/*  BESCHREIBUNG  Bildschirmzeile loeschen.		 		   */
X/*     PARAMETER  keine	                                                   */
X/*     RUECKGABE  keine			                                   */
X/***************************************************************************/
X
Xvoid clearline()
X{
X  printf("%c", CR);
X  if (ansi("ce") == 1) {
X	printf("                                                               ");
X  }
X  printf("%c", CR);
X}
X
X
X/***************************************************************************/
X/*      FUNKTION  isin()						   */
X/*  BESCHREIBUNG  Prueft ob ein Zeichen in einer Zeichenkette vorkommt.	   */
X/*     PARAMETER  pattern = Zeichenkette mit den moegl. Uebereinstimmungen */
X/*		  c       = Zeichen					   */
X/*     RUECKGABE  0       = Zeichen ist NICHT in Zeichenkette enthalten	   */
X/***************************************************************************/
X
Xint isin( pattern, c )
Xunsigned char pattern[];
Xint c;
X{
X  int i = 0;
X  int ok = 0;
X
X  while((pattern[i] != '\0') && (ok == 0)){
X	if(pattern[i] == c) ok++;	
X	i++;
X  }
X  
X  return (int) ok;  
X}
X
X
X/***************************************************************************/
X/*      FUNKTION  sgrep()						   */
X/*  BESCHREIBUNG  Prueft ob Muster in einer Zeichenkette vorkommt.	   */
X/*     PARAMETER  pattern = Zeichenkette mit den moegl. Uebereinstimmungen */
X/*		  source  = Zeichenkette				   */
X/*     RUECKGABE  0       = Muster ist NICHT in Zeichenkette enthalten	   */
X/***************************************************************************/
X
Xint sgrep( source, pattern )
Xunsigned char source[];
Xunsigned char pattern[];
X{
X  unsigned char t[STRING];
X  int i = 0;
X 
X  while(source[i] != 0){
X	if(source[i] == pattern[0]){
X		strcpy(t, (unsigned char *) strcopy(source, i, strlen(source)));
X		if(strcomp(pattern, t) == 0) return (int) i;
X	}
X	i++;
X  }
X
X  return (int) 0;
X}
X
END_OF_FILE
  if test 24683 -ne `wc -c <'src/tools.c'`; then
    echo shar: \"'src/tools.c'\" unpacked with wrong size!
  fi
  # end of 'src/tools.c'
fi
if test -f 'wendy/Makefile' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'wendy/Makefile'\"
else
  echo shar: Extracting \"'wendy/Makefile'\" \(1007 characters\)
  sed "s/^X//" >'wendy/Makefile' <<'END_OF_FILE'
X# MINIX 386 (BCC)
X O= o
X CC= bcc
X CHMEM= chmem
X CFLAGS= -D_SYS7 -D_LOCAL
X CONVERT= mv a.out $@
X STRIP= strip $@
X#
X#
X# MINIX 386 (GCC 1.37)
X# O= o
X# CC= gcc
X# CHMEM= :
X# CFLAGS= -O -D_SYS7 -D_ESTDIO -traditional
X# CONVERT= /usr/local/bin/gcc2minix < a.out > $@
X# STRIP= strip $@
X#
X#
X# ESIX SVR3
X# O= o
X# CC= gcc
X# CFLAGS= -O2
X# LIB= -lcurses -lc_s
X# CONVERT= mv a.out $@
X# STRIP= strip $@
X# 
X# 
X# Dell 2.1 (SVR4) & GCC 2.1
X# O= o
X# CC= /usr/local/bin/gcc
X# LN= ln
X# CHMEM= :
X# CFLAGS= -traditional -g 
X# LIB= -ltermlib
X# CONVERT= mv a.out $@
X# CHOWN= chown $(OWNER) 
X# CHGRP= chgrp $(GROUP)
X# STRIP= :
X#
X# 
X 
XPROG=wendy
X 
XOBJ=    getch.$(O) echo.$(O) getline.$(O) tools.$(O) block.$(O) \
X	misc.$(O) rtf.$(O) screen.$(O) ctrl.$(O) wendy.$(O)
X 
X$(PROG): $(OBJ)
X	$(CC) $(CFLAGS) $(OBJ) $(LIB)
X	@$(CONVERT)
X	@$(CHMEM) +250000 $@
X	@$(STRIP)
X	@chmod +x $@
X
Xblock.o:	wendy.h
Xmisc.o:		wendy.h
Xrtf.o:		wendy.h
Xscreen.o:	wendy.h
Xctrl.o:		wendy.h
Xwendy.o:	wendy.h	
X
X 
Xclean:;
X	@rm -f *.$(O) core a.out wendy wendy.sh
X	
END_OF_FILE
  if test 1007 -ne `wc -c <'wendy/Makefile'`; then
    echo shar: \"'wendy/Makefile'\" unpacked with wrong size!
  fi
  # end of 'wendy/Makefile'
fi
echo shar: End of archive 5 \(of 15\).
cp /dev/null ark5isdone
MISSING=""
for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 15 archives.
    rm -f ark[1-9]isdone ark[1-9][0-9]isdone
else
    echo You still must unpack the following archives:
    echo "        " ${MISSING}
fi
exit 0
exit 0 # Just in case...

