$! ------------------ CUT HERE ----------------------- $ v='f$verify(f$trnlnm("SHARE_UNPACK_VERIFY"))' $! $! This archive created by VMS_SHARE Version 8.2 $! On 26-APR-1993 19:00:28.76 By user ST1CK $! $! The VMS_SHARE software that created this archive $! was written by Andy Harper, Kings College London UK $! -- December 1992 $! $! Credit is due to these people for their original ideas: $! James Gray, Michael Bednarek $! $! $! THE FOLLOWING FILE(S) WILL BE CREATED AFTER UNPACKING: $! 1. 000READ.ME;5 $! 2. CLIENT.C;204 $! 3. CLIENT.DOC;9 $! 4. CLIENT.H;22 $! 5. CLIENT.OPTS;3 $! 6. COMPILING.INFO;3 $! 7. HISTORY.CLIENT;7 $! 8. MULTINET.COM;2 $! 9. READIT.C;7 $! 10. TO.DO;7 $! 11. UCX.COM;2 $! 12. WOLLENGONG.COM;2 $! $set="set" $set symbol/scope=(nolocal,noglobal) $f=f$parse("SHARE_UNPACK_TEMP","SYS$SCRATCH:."+f$getjpi("","PID")) $e="write sys$error ""%UNPACK"", " $w="write sys$output ""%UNPACK"", " $ if .not. f$trnlnm("SHARE_UNPACK_LOG") then $ w = "!" $ ve=f$getsyi("version") $ if ve-f$extract(0,1,ve) .ges. "4.4" then $ goto start $ e "-E-OLDVER, Must run at least VMS 4.4" $ v=f$verify(v) $ exit 44 $unpack: subroutine ! P1=filename, P2=checksum, P3=attributes $ if f$parse(P1) .nes. "" then $ goto dirok $ dn=f$parse(P1,,,"DIRECTORY") $ w "-I-CREDIR, Creating directory ''dn'" $ create/dir 'dn' $ if $status then $ goto dirok $ e "-E-CREDIRFAIL, Unable to create ''dn' File skipped" $ delete 'f'* $ exit $dirok: $ x=f$search(P1) $ if x .eqs. "" then $ goto file_absent $ e "-W-EXISTS, File ''P1' exists. Skipped" $ delete 'f'* $ exit $file_absent: $ w "-I-UNPACK, Unpacking file ", P1 $ n=P1 $ if P3 .nes. "" then $ n=f $ if .not. f$verify() then $ define/user sys$output nl: $ EDIT/TPU/NOSEC/NODIS/COM=SYS$INPUT 'f'/OUT='n' PROCEDURE GetHex(s,p)LOCAL x1,x2;x1:=INDEX(t,SUBSTR(s,p,1))-1;x2:=INDEX(t, SUBSTR(s,p+1,1))-1;RETURN 16*x1+x2;ENDPROCEDURE; PROCEDURE SkipPartsep LOOP EXITIF MARK(NONE)=END_OF(b);EXITIF INDEX(ERASE_LINE, "-+-+-+-+-+-+-+-+")=1;ENDLOOP;ENDPROCEDURE;PROCEDURE ProcessLine LOCAL c,s,l,b, n,p;c := ERASE_CHARACTER(1);s := ERASE_LINE;IF c = "X" THEN SPLIT_LINE; ENDIF; MOVE_HORIZONTAL(-1);l := LENGTH(s);p := 1;LOOP EXITIF p > l;c := SUBSTR(s,p,1); p := p+1;CASE c FROM ' ' TO '`' ['`']: COPY_TEXT(ASCII(GetHex(s,p))); p:=p+2;[ ' ']: p:=p+1;[INRANGE,OUTRANGE]: COPY_TEXT(c);ENDCASE;ENDLOOP;ENDPROCEDURE; PROCEDURE Decode POSITION(BEGINNING_OF(b));LOOP EXITIF MARK(NONE)=END_OF(b); IF INDEX(CURRENT_LINE,"+-+-+-+-+-+-+-+-")=1 THEN SkipPartSep;ELSE ProcessLine; MOVE_HORIZONTAL(1);ENDIF;ENDLOOP;ENDPROCEDURE;SET(FACILITY_NAME,"UNPACK");SET( SUCCESS,OFF);SET(INFORMATIONAL,OFF);t:="0123456789ABCDEF";f:=GET_INFO( COMMAND_LINE,"file_name");b:=CREATE_BUFFER(f,f);Decode;WRITE_FILE(b,GET_INFO( COMMAND_LINE,"output_file"));QUIT; $ if p3 .eqs. "" then $ goto dl $ open/write fdl &f $ write fdl "RECORD" $ write fdl P3 $ close fdl $ w "-I-CONVRFM, Converting record format to ", P3 $ convert/fdl=&f &f-1 &P1 $dl: delete 'f'* $ checksum 'P1' $ if checksum$checksum .nes. P2 then $ - e "-E-CHKSMFAIL, Checksum of ''P1' failed." $ exit $ endsubroutine $start: $! $ create 'f' XFor`20the`20most`20part`20this`20client`20will`20do`20what`20the`20Unix`20Empc Vlient.1.0`20will`20do,`20with Xa`20little`20more.`20`20One`20of`20these`20days`20I`20will`20fix`20the`20few V`20major`20bugs`20I`20know`20about. X XYou`20can`20have`20pre-defined`20macros,`20if`20you`20have`20any`20questions, V`20please`20email`20me. X X XDon`20Harper Xst1ck@jetson.uh.edu`20(`20borrowed`20account`20): $ call unpack 000READ.ME;5 - 323093805 "FORMAT STREAM_LF;CARRIAGE_CONTROL CARRIAGE_RETURN" $! $ create 'f' X/***************************************************************************** V* X`20*`20 X`20*`20VMS`20Client`20for`20BSD`20Empire`201.1.5`20and`20related`20versions. X`20* X`20*`20`20NOTICE!!!!`20`20This`20is`20not`20for`20Dave`20Pare's`20BSD`20Empire V`202.x. X`20* X`20* X`20*`20`20`20`20Please`20see`20the`20file`20HISTORY.CLIENT`20for`20complete V`20history`20and`20acks. X`20* X`20*************************************************************************** V*** X`20*/ X X#include`20"client.h" X X Xchar`20*readit(); Xstruct`20hostent`20*hostentry,`20*gethostbyname(),`20*gethostbyaddr(); Xunsigned`20long`20rhost(); X Xchar`20*strcpy(),`20*strcat(); Xint`20strcmp(); Xsize_t`20strlen(); X Xchar`20*cuserid(); XFILE`20*options; Xchar`20hostname`5B50`5D; Xchar`20hm`5B256`5D,`20portname`5B6`5D,`20countryname`5B20`5D,`20password`5B20 V`5D,`20gamename`5B80`5D; X Xchar`20*inbuffer; Xint`20trash,`20btus,`20mins,i; X XFILE`20*redir,`20*input; Xchar`20outfile`5B80`5D,infile`5B80`5D,temp`5B80`5D; X Xchar`20linefeed`5B`5D`20=`20"`5Cn"; Xint`20server_socket; X Xchar`20output`5B256`5D,`20userid`5B16`5D; Xint`20l; Xchar`20buffer`5B513`5D; Xchar`20tmp`5B256`5D; Xint`20reading,`20done,`20dosend,`20buflen,`20execsend; Xint`20number; XFILE`20*oldinput; Xchar`20*tempptr; Xstruct`20nlist`20*alias; X Xint`20port; Xstruct`20sockaddr_in`20sin; Xchar`20*country; Xint`20status,count; X X Xvoid`20perr`20(`20msg`20) Xchar`20*msg; X`7B X`09fprintf(stderr,"`5CnVMS`20EmpireClient:`20%s`20`5Cn",msg); X`09return; X`7D X Xclosedown`20(message,`20server_socket) Xchar`20message`5B`5D; Xint`20server_socket; X`7B X`09perr`20(message); X`09netclose`20(server_socket); X`09exit`20(1); X`7D X X Xvoid`20send_sock(`20server_socket,`20buffer) Xint`20server_socket; Xchar`20*buffer; X`7B X`20`20int`20buflen; X X`09buflen`20=`20strlen(buffer); X`09status`20=`20send(server_socket,`20buffer,`20buflen,`200); X`09if`20(status`20!=`20buflen) X`09`09closedown`20("send`20failed",`20server_socket); X`09return; X`7D X/********** X* X*`20still`20not`20working`20(11-Feb-1993),`20sends`20tell,`20but`20out`20of V`20sync.`20dont`20know`20if X*`20problem`20here,`20or`20in`20switch`20statement`20calling..need`20to`20read V`20code`20to`20better X*`20understand`20problem. X***********/ X Xvoid`20mailtel`20(country) X`7B X`09struct`20dsc$descriptor_s`20command_desc; X`09int`20rwm,`20status,`20i; X`09char`20*command; X`09printf("%s`5Cn",country); X`09status`20=`20sys$setrwm`20(0); X`09if`20(status`20==`20SS$_WASCLR)`20`20rwm`20=`200; X`09else`20rwm`20=`201; X`09command`20=`20(char`20*)malloc(512); X`09for(i=0;i<512;i++)`20command`5Bi`5D=0; X`09delete("sys$scratch:emp.mail"); X`09strcpy`20(command,`20"edit/tpu`20sys$scratch:emp.mail"); X`09command_desc.dsc$w_length`20=`20(short)`20strlen(command); X`09command_desc.dsc$a_pointer`20=`20command; X`09command_desc.dsc$b_class`20=`20DSC$K_CLASS_S; X`09command_desc.dsc$b_dtype`20=`20DSC$K_DTYPE_T; X`09lib$spawn(`26command_desc,0,0,0,0,0,0,0,0,0,0,0); X`09status`20=`20sys$setrwm`20(rwm); X`09printf("%s`5Cn",country); X`09strcpy(buffer,`20"tel`20"); X`09strcat`20(buffer,`20country); X`09printf("%s`5Cn",country); X`09send_sock(server_socket,`20buffer); X`09tempptr`20=`20readit(server_socket); X`09strcpy(buffer,`20INTRO); X`09send_sock(server_socket,`20buffer); X`09tempptr`20=`20readit(server_socket); X`09input`20=`20fopen("sys$scratch:emp.mail","r"); X`09if`20(input`20==`20(FILE`20*)`200) X`09`7B X`09`09perr("Unable`20to`20open`20'sys$scratch:emp.mail'`20for`20input"); X`09`7D X`09else X`09`7B X`09`09tempptr`20=`20fgets`20(buffer,`20sizeof(buffer)-1,`20input); X`09`09while`20(tempptr`20!=`20(char`20*)`20NULL) X`09`09`7B X`09`09`09send_sock(server_socket,`20buffer); X`09`09`09tempptr`20=`20readit(server_socket); X`09`09`09tempptr`20=`20fgets`20(buffer,`20sizeof(buffer)-1,`20input); X`09`09`7D X`09`7D X`09strcpy(buffer,`20SIGNATURE); X`09send_sock(server_socket,`20buffer); X`09buffer`5B0`5D`20=`2010; X`09buffer`5B1`5D`20=`200; X`09send_sock(server_socket,`20buffer); X`09fclose(input); X`09input`20=`20stdin; X`7D X Xvoid`20callsysspawn`20(buffer) Xchar`20*buffer; X`7B X`09struct`20dsc$descriptor_s`20command_desc; X`09int`20rwm,`20status,`20i; X`09char`20*command; X X`09status`20=`20sys$setrwm`20(0); X`09if`20(status`20==`20SS$_WASCLR)`20`20rwm`20=`200; X`09else`20rwm`20=`201; X`09if`20(buffer`5B1`5D`20!=0)`7B X`09`09command`20=`20(char`20*)malloc(512); X`09`09for(i=0;i<512;i++)`20command`5Bi`5D=0; X`09`09strcpy`20(command,`20buffer); X`09`09command_desc.dsc$w_length`20=`20(short)`20strlen(command); X`09`09command_desc.dsc$a_pointer`20=`20command; X`09`09command_desc.dsc$b_class`20=`20DSC$K_CLASS_S; X`09`09command_desc.dsc$b_dtype`20=`20DSC$K_DTYPE_T; X`09`09lib$spawn(`26command_desc,0,0,0,0,0,0,0,0,0,0,0); X`09`7D`20else`20`7B X`09`09lib$spawn`20(0,0,0,0,0,0,0,0,0,0,0,0); X`09`7D X`09status`20=`20sys$setrwm`20(rwm); X`7D X Xunsigned`20hash`20(s) Xchar`20*s; X`7B X`09unsigned`20hashval; X X`09for`20(hashval`20=`200;`20*s`20!=`20'`5C0';`20s++) X`09`09hashval`20=`20*s`20+`2031`20*`20hashval; X`09return`20hashval`20%`20HASHSIZE; X`7D X Xchar`20*strdup`20(s) Xchar`20*s; X`7B X`09char`20*p; X`09p`20=`20(char`20*)`20malloc(strlen(s)+1); X`09if`20(p`20!=`20NULL) X`09`09strcpy(p,s); X`09return`20p; X`7D X Xstruct`20nlist`20*lookup`20(s) Xchar`20*s; X`7B X`09struct`20nlist`20*np; X X`09for`20(np`20=`20hashtab`5Bhash(s)`5D;`20np`20!=`20NULL;`20np`20=`20np->next V) X`09`09if`20(strcmp(s,`20np->name)`20==`200) X`09`09`09return`20np; X`09return`20NULL; X`7D X Xstruct`20nlist`20*install(name,defn) Xchar`20*name,`20*defn; X`7B X`09struct`20nlist`20*np; X`09unsigned`20hashval; X X`09if`20((np`20=`20lookup(name))`20==`20NULL)`7B X`09`09np`20=`20(`20struct`20nlist`20*)malloc(sizeof(*np)); X`09`09if`20(np`20==`20NULL`20`7C`7C`20(np->name`20=`20strdup(name))`20==`20NUL VL) X`09`09`09return`20NULL; X`09`09hashval`20=`20hash(name); X`09`09np->next`20=`20hashtab`5Bhashval`5D; X`09`09hashtab`5Bhashval`5D`20=`20np; X`09`7D`20else X`09`09free((void`20*)np->defn); X`09if`20((np->defn`20=`20strdup(defn))`20==`20NULL) X`09`09return`20NULL; X`09return`20np; X`7D X Xvoid`20AlarmClock`20() X`7B X`09perr("The`20Alarm`20Clock`20has`20rung`5C!"); X`09exit(1); X`7D X Xmain`20(argc,`20argv) Xint`20argc; Xchar`20*argv`5B`5D; X`7B X`09char`20name`5B20`5D,def`5B100`5D; X X`09signal`20(SIGALRM,`20AlarmClock); X X`09redir`20=`20stdout; X`09input`20=`20stdin; X X`09if`20((argc`20!=`201)`20`26`26`20(argc`20!=`202)) X`09`7B X`09`09printf`20("`5Cnempire`20:==`20$:`5B`5Dclient.exe"); X`09`09printf`20("`5CnUsage:`20`20`5Bgame-name`5D`20"); X`09`09exit`20(1); X`09`7D X X`09printf`20("`5CnVMS`20Empire`20Client`20V%s`5Cn",CLIENTVER); X`09options`20=`20fopen`20("empiredir:client.OPTS","r"); X`09if`20(options`20==`20(FILE`20*)`200) X`09`7B X`09`09printf`20("`5CnEMPIREDIR:CLIENT.OPTS`20not`20found"); X`09`09printf`20("`5CnAssuming`20DEFINE`20EMPIREDIR`20sys$login"); X`09`09printf`20("`5CnAdd`20DEFINE`20EMPIREDIR`20:`5B`5D`20t Vo`20your`20LOGIN.COM`20file"); X`09`09printf`20("`5Cnto`20make`20this`20message`20stop`20appearing."); X`09`09printf`20("`5Cn"); X`09`09options`20=`20fopen`20("sys$login:client.OPTS","r"); X`09`7D X X`09if`20(options`20==`20(FILE`20*)`200) X`09`7B X`09`09perr`20("Unable`20to`20CLIENT.OPTS"); X`09`09printf`20("Quitting...`5Cn`20"); X`09`09exit(1); X`09`7D X`09else X`09`7B X`09`09gamename`5B0`5D`20=`200; X`09`09if`20(argc`20==`202)`20`20while`20((strcmp(argv`5B1`5D,gamename)`20!= V`20NULL)`26`26 X`09`09`09(fgets(hm,256,options)`20!=`20NULL)) X`09`09`7B X`09`09`09`20`20if`20(hm`5B0`5D`20!=`20'#') X`09`09`09`09sscanf(hm,"addgame`20%s`20%s`20%s`20%s`20%s", X`09`09`09`09`09`26hostname,`26portname,`26countryname,`26password, X`09`09`09`09`09`26gamename); X`09`09`7D X`09`09else X`09`09`7B X`09`09`09perr("No`20game`20name`20given.`20List`20a`20game`20name`20to`20start V."); X`09`09`09exit(1); X`09`09`7D X`09`09while`20(fgets(hm,256,options)`20!=`20NULL) X`09`09`7B X`09`09`09`20`20if`20(hm`5B0`5D`20!=`20'#') X`09`09`09`09if`20(sscanf(hm,"alias`20%s`20`5C"%`5B`5E`5C"`5Ds",`26name,`26def) V==2) X`09`09`09`09install(name,def); X`09`09`7D X`09`7D X X`09fclose(options); X X`09cuserid(userid); X`09printf`20("`5Cn"); X#ifdef`20WOLLENGONG X`09if`20((sin.sin_addr.s_addr`20=`20rhost`20(hostname))`20==`20-1) X`09`7B X`09`09printf`20("%s:`20unknown`20host`5Cn",`20hostname); X`09`09exit`20(1); X`09`7D X#else X`09if`20((hostentry`20=`20gethostbyname(hostname))`20==`20NULL) X`09`7B X`09`09printf`20("%s:`20unknown`20host`5Cn",`20hostname); X`09`09exit`20(1); X`09`7D X`09memcpy((void`20*)`20`26sin.sin_addr,`20(void`20*)`20hostentry->h_addr, X`09`20`20`20`20(size_t)`20hostentry->h_length); X#endif X`09sin.sin_family`20=`20AF_INET; X`09sscanf`20(portname,"%d",`26port); X`09sin.sin_port`20=`20htons`20(port); X X`09server_socket`20=`20socket`20(AF_INET,`20SOCK_STREAM,`200); X`09if`20(server_socket`20==`20-1) X`09`7B X`09`09perr`20("socket`20failed"); X`09`09exit`20(1); X`09`7D X X`09status`20=`20connect`20(server_socket,`20`26sin,`20sizeof`20(sin)); X`09if`20(status`20==`20-1)`20`20closedown`20("connect`20refused",`20server_soc Vket); X X`09inbuffer`20=`20readit(server_socket); X`09if`20(*inbuffer`20!=`20'2')`20exit(1); X X`09strcpy`20(output,`20"user`20"); X`09strcat`20(output,`20userid); X`09strcat`20(output,linefeed); X`09send_sock(server_socket,`20output); X X`09inbuffer`20=`20readit(server_socket); X`09if`20(inbuffer`5B0`5D`20!=`20C_CMDOK) X`09`7B X`09`09printf`20("`5CnUser`20not`20accepted"); X`09`09exit(1); X`09`7D X X`09strcpy`20(output,`20"coun`20"); X`09strcat`20(output,`20countryname); X`09strcat`20(output,linefeed); X`09send_sock(server_socket,`20output); X X`09inbuffer`20=`20readit(server_socket); X`09if`20(inbuffer`5B0`5D`20!=`20C_CMDOK) X`09`7B X`09`09printf`20("`5CnCountry`20not`20accepted"); X`09`09exit(1); X`09`7D X X`09strcpy`20(output,`20"pass`20"); X`09strcat`20(output,`20password); X`09strcat`20(output,linefeed); X`09send_sock(server_socket,`20output); X X`09inbuffer`20=`20readit(server_socket); X`09if`20(inbuffer`5B0`5D`20!=`20C_CMDOK) X`09`7B X`09`09printf`20("`5CnPassword`20not`20accepted"); X`09`09exit(1); X`09`7D X X`09strcpy`20(output,`20"play"); X`09strcat`20(output,linefeed); X`09send_sock(server_socket,`20output); X X`09printf("`5Cn`5Ct-=O=-`5Cn"); X`09done`20=`20TRUE; X`09reading`20=`20TRUE; X`09while`20(done`20==`20TRUE) X`09`7B X`09`09while`20(reading`20==`20TRUE) X`09`09`7B X X`09`09`09inbuffer`20=`20readit(server_socket); X`09`09`09switch`20(*inbuffer) X`09`09`09`7B X`09`09`09case`20C_CMDOK: X`09`09`09`09fprintf`20(redir,`20"`20-`20%s",`20`26inbuffer`5B2 V`5D); X`09`09`09`09break; X`09`09`09case`20C_DATA: X`09`09`09`09fprintf`20(redir,`20"%s",`20`26inbuffer`5B2`5D); X`09`09`09`09break; X`09`09`09case`20C_INIT: X`09`09`09`09if`20(inbuffer`5B2`5D`20!=`20'2') X`09`09`09`09`7B X`09`09`09`09`09fprintf(redir,`20 X`09`09`09`09`09`20`20`20`20"Warning!`20Empire`20version`20is`20%s`5Cn",`20`26i Vnbuffer`5B2`5D); X`09`09`09`09`09fprintf(redir,`20"while`20client`20version`20is`202.`20`20"); X`09`09`09`09`09fprintf(redir,`20"Use`20at`20your`20own`20risk.`5Cn"); X`09`09`09`09`7D X`09`09`09`09break; X`09`09`09case`20C_EXIT: X`09`09`09`09/*if`20(strncmp(`26inbuffer`5B2`5D,"country`20in`20use",14)==NULL) V X`09`09`09`09`7B X`09`09`09`09`09fprintf(stdout,`26inbuffer`5B2`5D); X`09`09`09`09`09fprintf(stdout,"Do`20you`20want`20to`20kill`20this?`20`5By`5D/n V`20"); X`09`09`09`09`09tempptr`20=`20fgets`20(buffer,`20sizeof(buffer)-1,`20input); X`09`09`09`09`09if`20((buffer`5B0`5D=='y')`7C`7C(buffer==NULL)) X`09`09`09`09`09`7B X`09`09`09`09`09`09strcpy(output,"kill"); X`09`09`09`09`09`09output`5B4`5D`20=`2010; X`09`09`09`09`09`09output`5B5`5D`20=`200; X`09`09`09`09`09`09send_sock(server_socket,output); X`09`09`09`09`09`09readit(buffer); X`09`09`09`09`09`09 X`09`09`09`09`09`7D X`09`09`09`09`7D*/ X`09`09`09`09fprintf`20(redir,`20"Exit:`20%s",`20`26inbuffer`5B2`5D); X`09`09`09`09exit(1); X`09`09`09`09break; X`09`09`09case`20C_FLUSH: X`09`09`09`09if`20(redir`20!=`20stdout) X`09`09`09`09`7B X`09`09`09`09`09fclose(redir); X`09`09`09`09`09redir`20=`20stdout; X`09`09`09`09`7D X`09`09`09`09inbuffer`5Bstrlen(inbuffer)`20-`201`5D`20=`200; X`09`09`09`09fprintf`20(redir,`20"%s",`20`26inbuffer`5B2`5D); X`09`09`09`09if`20(!execsend) X`09`09`09`09`09reading`20=`20FALSE; X`09`09`09`09else X`09`09`09`09`09reading`20=`20TRUE; X`09`09`09`09break; X`09`09`09case`20C_NOECHO: X`09`09`09`09printf`20("%s",`20inbuffer); X`09`09`09`09break; X`09`09`09case`20C_PROMPT: X`09`09`09`09if`20(redir`20!=`20stdout) X`09`09`09`09`7B X`09`09`09`09`09fclose(redir); X`09`09`09`09`09redir`20=`20stdout; X`09`09`09`09`7D X`09`09`09`09sscanf`20(inbuffer,`20"%d`20%d`20%d",`20`26trash,`20`26mins,`20 V`26btus); X`09`09`09`09fprintf`20(redir,`20"`5Cn%s`20`5B%d:%d`5D`20:`20",gamename,mins, V`20btus); X`09`09`09`09reading`20=`20FALSE; X`09`09`09`09break; X`09`09`09case`20C_ABORT: X`09`09`09`09printf`20("%s",`20inbuffer); X`09`09`09`09break; X`09`09`09case`20C_REDIR: X`09`09`20`20`20`20`09`09if`20(sscanf`20(`26inbuffer`5B2`5D,"`20>>%s",outfile) V`20==`201`20) X`09`09`20`20`20`20`09`09`7B X`09`09`20`20`20`20`09`09`09if(redir`20!=`20stdout`20) X`09`09`09`09`09`09fclose(redir); X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`09`09`09redir`20= V`20fopen`20(outfile,"a"); X`09`09`20`20`20`20`09`09`7D X`20`09`09`20`20`20`20`09`09else`20if`20((`20sscanf`20(`26inbuffer`5B2`5D,"`20> V!%s",`20outfile)`20==`201`20)`20`7C`7C X`09`09`09`09`09(`20sscanf`20(`26inbuffer`5B2`5D,"`20>%s",outfile)`20==`201`20) V) X`09`09`09`09`7B X`09`09`20`20`20`20`09`09`09if(redir`20!=`20stdout`20) X`09`09`09`09`09`09fclose(redir); X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`09`09`09redir`20= V`20fopen`20(outfile,"w"); X`09`09`20`20`20`20`09`09`7D X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`09`09if`20(redir V`20==`20(FILE`20*)`200) X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`09`09`7B X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`09`09 V`09fprintf`20(stderr,`20"`5CnUnable`20to`20open`20'%s'`20for`20output."); X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`09`09 V`09redir`20=`20stdout; X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`09`09`7D X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`09`09break; X`09`09`09case`20C_PIPE: X`09`09`09`09printf`20("%s",`20inbuffer); X`09`09`09`09break; X`09`09`09case`20C_CMDERR: X`09`09`09`09fprintf`20(redir,`20"`20-`20%s",`20`26inbuffer V`5B2`5D); X`09`09`09`09exit`20(1); X`09`09`09`09break; X`09`09`09case`20C_BADCMD: X`09`09`09`09printf`20("%s",`20inbuffer); X`09`09`09`09break; X`09`09`09case`20C_EXECUTE: X`09`09`09`09count`20=`20sscanf`20(`26inbuffer`5B2`5D,"%s`20%s",`20infile,`20te Vmp); X`09`09`09`09if`20(count`20==`202) X`09`09`09`09`7B X`09`09`09`09`09sscanf`20(temp,">%s",`20outfile); X`09`09`09`09`09redir`20=`20fopen`20(outfile,"w"); X`09`09`09`09`09if`20(redir`20==`20(FILE`20*)`200) X`09`09`09`09`09`7B X`09`09`09`09`09`09fprintf`20(stderr,`20"`5CnUnable`20to`20open`20'%s'`20for V`20output."); X`09`09`09`09`09`09redir`20=`20stdout; X`09`09`09`09`09`7D X`09`09`09`09`7D X`09`09`09`09fprintf`20(redir,`20"Sending`20%s...`5Cn",`20infile); X`09`09`09`09input`20=`20fopen`20(infile,"r"); X`09`09`09`09if`20(input`20==`20(FILE`20*)`200) X`09`09`09`09`7B X`09`09`09`09`09fprintf`20(stderr,`20"Unable`20to`20open`20'%s'`20for`20input V`5Cn", X`09`09`09`09`09`20`20`20`20infile); X`09`09`09`09`7D X`09`09`09`09else X`09`09`09`09`7B X`09`09`09`09`09tempptr`20=`20fgets`20(buffer,`20sizeof(buffer)-1,`20input); X`09`09`09`09`09while`20(tempptr`20!=`20(char`20*)`20NULL) X`09`09`09`09`09`7B X`09`09`09`09`09`09send_sock(server_socket,`20buffer); X`09`09`09`09`09`09tempptr`20=`20fgets`20(buffer,`20sizeof(buffer)-1,`20input); V X`09`09`09`09`09`7D X`09`09`09`09`7D X`09`09`09`09buffer`5B0`5D`20=`2010; X`09`09`09`09buffer`5B1`5D`20=`200; X`09`09`09`09send_sock(server_socket,`20buffer); X`09`09`09`09execsend`20=`20FALSE; X`09`09`09`09fclose(input); X`09`09`09`09input`20=`20stdin; X`09`09`09`09break; X`09`09`09default: X`09`09`09`09fprintf`20(redir, X`09`09`09`09`20`20`20`20"`5Cn`5Cn`20*****OH`20OH.`20`20Unknown`20empire`20dire Vctive`20#%d,`20'%c',`20`5B%s`5D`20`5Cn`5Cn"); X`09`09`09`09fprintf`20(redir, X`09`09`09`09`20`20`20`20"`5Cn`20Contact`20FXMLK%alaska.bitnet@cunyvm.cuny.edu" V); X`09`09`09`09fprintf`20(redir, X`09`09`09`09`20`20`20`20"`5Cn`20and`20tell`20him`20what`20the`20directive`20wa Vs.`5CnThanks!"); X`09`09`09`09fprintf`20(redir,`20"`5Cn"); X`09`09`09`09break; X`09`09`09`7D X`09`09`7D X X`09`09tempptr`20=`20fgets`20(buffer,`20sizeof(buffer)-1,`20input); X`09`09if`20(tempptr`20==`20(char`20*)`20NULL) X`09`09`7B X`09`09`09input`20=`20stdin; X`09`09`09strcpy`20(buffer,linefeed); X`09`09`7D X X`09`09buffer`5Bstrlen(buffer)-1`5D=0; X`09`09if`20(`20(alias`20=`20lookup(buffer)`20)`20!=`20NULL`20) X`09`09`09strcpy`20(buffer,`20alias->defn); X X`09`09i`20=`20strlen(buffer); X`09`09buffer`5Bi`5D=10; X`09`09buffer`5Bi+1`5D=0; X X`09`09switch(buffer`5B0`5D) X`09`09`7B X`09`09case`20'$'`20: X`09`09`09dosend`20=`20FALSE; X`09`09`09buffer`5Bstrlen(buffer)-1`5D=0; X`09`09`09callsysspawn`20(`26buffer`5B1`5D); X`09`09`09break; X`09`09case`20'`5C`5C'`20: X`09`09`09`7B X`09`09`09`09dosend`20=`20FALSE; X`09`09`09`09switch`20(buffer`5B1`5D) X`09`09`09`09`7B X`09`09`09`09case`20'h'`20: X`09`09`09`09case`20'?'`20: X`09`09printf`20("`5Cn-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-"); X`09`09printf`20("`5Cn`5C`5CH`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20-`20This`20help`20screen"); X`09`09printf`20("`5Cn`5C`5CL`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20-`20List`20all`20defined`20macros."); X`09`09printf`20("`5Cn`5C`5CL`20`20`20`20`20`20`20`20`20`20-`20List`20gi Vven`20macro."); X`09`09/*printf`20("`5Cn`5C`5C%%`20`20`20`20`20`20`20`20-`20Envoke V`20Mail`20Editor`20to`20send`20tel`20to`20cou`20num.");*/ X`09`09printf`20("`5Cn-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-"); X`09`09printf`20("`5Cn"); X`09`09`09`09`09break; X`09`09`09`09/*`20`20This`20is`20not`20working X`09`09`09`09case`20'%'`20: X`09`09`09`09`09mailtel`20(`26buffer`5B2`5D); X`09`09`09`09`09dosend`20=`20FALSE; X`09`09`09`09`09reading`20=`20FALSE; X`09`09`09`09`09break; X*/ X`09`09`09`09case`20'L'`20: X`09`09`09`09case`20'l'`20: X`09`09`09`09`09if`20(buffer`5B2`5D`20==`2010`20) X`09`09`09`09`09`7B X`09`09`09`09`09`09for`20(`20i=0;i`20!=`20HASHSIZE`20;`20i++) X`09`09`09`09`09`09`09if(hashtab`5Bi`5D`20!=`20NULL)`20printf("alias`20%s`20: V`20%s`5Cn", X`09`09`09`09`09`09`20`20`20`20`09hashtab`5Bi`5D->name,hashtab`5Bi`5D->defn); X`09`09`09`09`09`7D X`09`09`09`09`09else X`09`09`09`09`09`09`7B X`09`09`09`09`09`09`09buffer`5Bstrlen(buffer)-1`5D`20=`200; X`09`09`09`09`09`09`09if`20(`20(alias`20=`20lookup(`26buffer`5B2`5D)`20)`20!= V`20NULL`20) X`09`09`09`09`09`09`09`09printf("alias`20%s`20:`20%s`5Cn",alias->name,`20alias- V>defn); X`09`09`09`09`09`09`7D X`09`09`09`09`09`09break; X`09`09`09`09`7D X`09`09`09`09break; X`09`09`09default: X`09`09`09`09dosend`20=`20TRUE; X`09`09`09`7D X`09`09`7D X`09`09if`20(dosend`20==`20TRUE) X`09`09`7B X`20`20`20`20`20`20`20`20`20`20`20`20`09`09send_sock(server_socket,`20buffer); X`09`09`09reading`20=`20TRUE; X`09`09`7D X`09`09else X`09`09`7B X`09`09`09if`20(inbuffer`5B0`5D`20==`20C_FLUSH) X`09`09`09`7B X`09`09`09`09if`20(redir`20!=`20stdout) X`09`09`09`09`7B X`09`09`09`09`09fclose(redir); X`09`09`09`09`09redir`20=`20stdout; X`09`09`09`09`7D X`09`09`09`09inbuffer`5Bstrlen(inbuffer)`20-`201`5D`20=`200; X`09`09`09`09fprintf`20(redir,`20"%s",`20`26inbuffer`5B2`5D); X`09`09`09`09reading`20=`20FALSE; X`09`09`09`7D X`09`09`09else X`09`09`09`7B X`09`09`09`09if`20(redir`20!=`20stdout) X`09`09`09`09`7B X`09`09`09`09`09fclose(redir); X`09`09`09`09`09redir`20=`20stdout; X`09`09`09`09`7D X`09`09`09`09sscanf`20(inbuffer,`20"%d`20%d`20%d",`20`26trash,`20`26mins,`20 V`26btus); X`09`09`09`09fprintf`20(redir,`20"`5Cn%s`20`5B%d:%d`5D`20:`20",gamename,mins, V`20btus); X`09`09`09`09reading`20=`20FALSE; X`09`09`09`7D X`09`09`7D X`09`7D X`09netclose`20(server_socket); X X`7D X $ call unpack CLIENT.C;204 - 1313262859 "FORMAT STREAM_LF;CARRIAGE_CONTROL CARRIAGE_RETURN" $! $ create 'f' X X X X X X X X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20VMS`20Client`204.0 X X`20`20`20`20`20`20`20`20`20`20`20Version`203.x`20and`20higher`20supported`20by V`20Donald`20Harper X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20(`20duckland,`20st1ck V@jetson.uh.edu`20) X X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20(Versions`201.x`20and`202.x V`20are`20unsupported.) X X`0C XContents X0.`20Acknologments X1.`20Getting`20the`20program X2.`20Compiling X3.`20Setting`20up`20your`20environment X4.`20CLIENT.OPTS X5.`20Running`20the`20client X6.`20Bug`20reporting X7.`20Future`20inhancements X X X0.`20ACKNOLOGMENTS X X`20`20I`20would`20like`20to`20thank`20Mike`20Kienenberger`20(AlphaComplex)`20f Vor`20the`20inital Xcode.`20`20He`20has`20been`20help`20whenever`20I`20have`20had`20questions`20ab Vout`20the`20netword Xcode.`20`20The`20rest`20of`20the`20beast`20is`20mainly`20mine`20now.`20:-) X`20`20I`20would`20also`20like`20to`20thank`20my`20beta-testers`20Willy`20Coulb Vour`20(Starfire) Xand`20Damon`20Wilkson`20(Mantarr)`20who`20have`20put`20up`20with`20me`20and V`20my`20quirky`20coding Xhabits. X X X1.`20GETTING`20THE`20PROGRAM X X`20`20I`20will`20try`20to`20keep`20a`20current`20released`20version`20of`20the V`20client`20located`20on Xftp.cis.ksu.edu.`20`20I`20may`20skip`20releasing`20versions`20until`20everythi Vng`20is Xworked`20out. X`20`20Once`20you`20get`20the`20file,`20all`20you`20will`20need`20to`20do`20is V`20type X X`09$`20@VMS_CLIENT_V_X X Xwhere`20V`20is`20the`20current`20Version`20and`20X`20is`20the`20current`20patc Vh`20level.`20`20This Xwill`20unpack`20several`20files`20for`20you`20in`20directory,`20icluding`20the V`20source Xfiles,`20this`20file,`20a`20history`20file,`20and`20several`20com`20files`20to V`20compile`20under Xdifferent`20types`20of`20TCP/IP`20layered`20products. X X X X2.`20COMPILING`20THE`20PROGRAM X X`20`20To`20compile,`20all`20you`20need`20to`20do`20is`20find`20out`20what`20ty Vpe`20of`20TCP/IP`20layered Xproduct`20you`20are`20running`20(`20if`20you`20do`20not`20know,`20ask`20a`20lo Vcal`20guru`20),`20and Xthe`20@`20the`20approrate`20com`20file.`20`20Nice,`20and`20simple,`20eh? X X X3.`20SETTING`20UP`20YOUR`20ENVIRONMENT X X`20`20Once`20you`20have`20a`20.EXE`20file,`20you`20are`20almost`20ready`20to V`20go.`20`20You`20seed`20to Xset`20up`20a`20logical`20telling`20the`20client`20where`20to`20look`20for`20th Ve`20CLIENT.OPTS Xfile,`20and`20you`20need`20to`20define`20the`20foreign`20command`20to`20run V`20the`20client. X X`20`20To`20define`20the`20logical,`20you`20would`20type: X X`09$`20define/nolog`20EMPIREDIR`20:`5B`5D X Xwhere`20`20is`20the`20name`20of`20the`20disk`20and`20`20is V`20the`20name`20of Xthe`20directory`20you`20want`20it`20in. X X`20`20If`20you`20do`20not`20know`20what`20drive`20you`20are`20on,`20then`20you V`20need`20to`20ask`20a`20local Xguru. X X`20`20To`20set`20up`20the`20client`20command,`20type X X`09$`20empire`20:==`20$:`5B`5Dclient.exe X X X X4.`20CLIENT.OPTS X X`20`20The`20CLIENT.OPTS`20file`20is`20the`20file`20the`20client`20reads`20on V`20startup`20to`20find Xout`20the`20game`20information`20and`20your`20aliases`20you`20want.`20`20A`20c Vopy`20of`20a`20sample Xone`20has`20been`20included. X X`20`20The`20format`20is`20simple.`20`20To`20list`20a`20game's`20information, V`20it`20is`20in`20the Xformat: X X`09addgame`20HOST`20PORT`20COUNTRY`20REP`20GAMENAME X Xwhere`20HOST`20is`20the`20host`20name,`20PORT`20is`20the`20game`20port,`20COUN VTRY`20is`20your Xcountry`20name,`20REP`20is`20your`20country`20rep`20or`20password,`20and`20GAM VENAME`20is`20the Xname`20you`20want`20to`20call`20the`20game`20when`20you`20start`20the`20client V`20up. X X`20`20For`20an`20alias,`20the`20format`20is: X X`09alias`20NAME`20"DEFN`20" X Xwher`20NAME`20is`20the`20alias`20name`20(`20case`20_IS_`20important`20)`20and V`20DEFN`20is`20the Xdefination`20of`20the`20alias`20(`20case`20is`20important`20only`20if`20the V`20command`20is`20going Xto`20the`20server`20). X X X5.`20RUNNING`20THE`20CLIENT X X5.1`20From`20DCL X X`20`20Once`20you`20have`20edited`20your`20CLIENT.OPTS`20and`20put`20it`20in V`20EMPIREDIR,`20and`20you Xhave`20defined`20`20the`20EMPIRE`20command,`20then`20you`20simply`20start`20th Ve`20client`20by Xtyping: X X`09$`20empire`20GAMENAME X Xwhere`20GAMENAME`20is`20the`20name`20that`20you`20have`20in`20your`20CLIENT.OP VTS. X X`20`20If`20you`20hit`20CTRL-C`20or`20CTRL-Y`20and`20it`20dumps`20you`20back V`20to`20your`20DCL`20prompt, Xyou`20can`20type`20CONT`20to`20resume. X X5.2`20Once`20started X X5.2.1`20The`20Command`20line`20Prompt X X`20`20The`20command`20line`20prompt`20will`20look`20somthing`20like`20this: X X`09duck3`20`5B7:512`5D`20: X`20`20`20`20`20`20`20`20`5E`5E`5E`5E`5E`20`20`5E`20`5E`5E`5E`20`20`20`5E`5E V`5E`5E`5E`5E X`09`7C`7C`7C`7C`7C`20`20`7C`20`7C`7C`7C`20`20`20++++++---`20the`20area`20you V`20enter`20information X`09`7C`7C`7C`7C`7C`20`20`7C`20+++------------`20the`20number`20of`20BTU's`20yo Vu`20have`20left X`09`7C`7C`7C`7C`7C`20`20+----------------`20the`20number`20of`20minutes`20you V`20have`20been`20logon X`09+++++-------------------`20the`20game`20name X X5.2.2`20Using`20Built-In`20Commands X X`20`20The`20list`20of`20built`20in`20commands`20can`20be`20viewed`20by`20typin Vg`20'`5C?'`20or`20'`5CH'`20at Xthe`20prompt.`20`20Example: X X`09duck3`20`5B7:512`5D`20:`20`5Ch X`09-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- X`09`5CH`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20-`20This`20help`20sc Vreen X`09`5CL`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20-`20List`20all`20def Vined`20macros. X`09`5CL`20`20`20`20`20`20`20`20`20`20-`20List`20given`20macro. X`09-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- X X`20`20To`20show`20the`20list`20of`20aliases`20defined,`20type`20'`5CL'`20at V`20the`20prompt: X X`09duck3`20`5B51:7`5D`20:`20`5Cl X`09alias`20dd`20:`20dump`20#`20>`20dump`20 X`09alias`20eoj`20:`20bye`20 X`09`5B...`5D X`09alias`20do`20:`20exec`20`5B-`5Ddo.exec`20 X`09alias`20ve.exec`20:`20exec`20ve.exec`20 X`09alias`20pu`20:`20$purge/log`20 X`09alias`20level`20:`20$level`20 X X`20`20To`20see`20a`20specific`20alias,`20type`20'`5CLALIAS',`20where`20ALIAS V`20is`20the`20alias`20you Xwant`20to`20see.`20`20Example: X X`09duck3`20`5B51:7`5D`20:`20`5CLlevel X`09alias`20level`20:`20$level`20 X X5.2.3`20Spawning`20Out X X`20`20There`20are`20two`20way`20to`20spawn,`20either`20spawn`20a`20command, V`20or`20a`20new`20shell.`20 XTo`20spawn`20a`20command,`20type`20'$COMMAND'.`20`20Example: X X`09duck3`20`5B51:512`5D`20:`20$mail X`09MAIL>`20exit X`09duck3`20`5B51:512`5D`20:`20 X X`20`20Or,`20you`20can`20spawn`20a`20new`20shell`20bye`20typing`20'$'`20by`20it Vself: X X`09duck3`20`5B51:512`5D`20:`20$ X`09$ X X X6.`20BUG`20REPORTING X X`20`20If`20you`20run`20into`20a`20bug`20with`20the`20code,`20then`20please`20s Vend`20mail`20to`20me`20with Xa`20description`20of`20how`20you`20ran`20into`20the`20bug.`20`20Please`20also V`20tell`20me`20what Xtype`20of`20TCP/IP`20layered`20product`20you`20are`20using.`20`20If`20it`20is V`20something`20other Xthan`20MULTINET,`20I`20will`20have`20a`20harder`20time`20fixing`20it,`20since V`20I`20do`20not`20have Xaccess`20to`20anything`20else. X`20`20Send`20email`20to: X X`09st1ck@jetson.uh.edu X X X7.`20FUTURE`20INHANCEMENTS X`20`20Things`20I`20am`20looking`20at`20adding`20in`20the`20future:`20`20a`20te Vlex/announcement Xeditor,`20more`20streamline`20code,`20fixing`20the`20sect`20command`20display, V`20adding`20 Xcommandline`20history,`20the`20ablity`20to`20switch`20between`20games,`20and V`20better Xalias`20handling.`20`20Yes,`20I`20am`20trying`20to`20re-write`20eif`20for`20VM VS.`20:-) $ call unpack CLIENT.DOC;9 - 2015050053 "FORMAT STREAM_LF;CARRIAGE_CONTROL CARRIAGE_RETURN" $! $ create 'f' X/***************************************************************************** V* X`20*`20client.h X`20*`20 X`20*`20All`20the`20structurs`20and`20includes`20need.`20`20This`20is`20a`20rea Vl`20ugly`20file`20right`20now. X`20*************************************************************************** V***/ X X#define`20CLIENTVER`20"`204.0" X X#ifdef`20WOLLENGONG X#`20include`20 X#`20include`20 X#`20include`20 X#elif`20MULTINET X#`20include`20 X#`20include`20 X#`20include`20 X#`20define`20netclose`20socket_close X#elif`20UCX X#`20include`20 X#`20include`20 X#`20include`20 X#`20define`20netclose`20close X#else X(`20Client`20will`20not`20compile`20at`20all,`20unless`20you`20define`20either V`20WOLLENGONG, XMULTINET,`20or`20UCX)`09$`20cc/define=`20client X/*`20End`20of`20TCP/IP`20specifics`20*/ X#endif X X#include`20 X#include`20 X#include`20 X#include`20 X#include`20 X#include`20 X#include`20 X#include`20 X X#define`20TRUE`201 X#define`20FALSE`200 X X#define`20CLIENTPROTO`092`09/*`20if`20new`20things`20are`20added,`20bump`20thi Vs`20*/ X X#define`09USER`09`090 X#define`09COUN`09`091 X#define`09QUIT`09`092 X#define`09PASS`09`093 X#define`09PLAY`09`094 X#define`09LIST`09`095 X#define`09CMD`09`096 X#define`09CTLD`09`097 X#define`20WAT`09`098 X X#define`09C_CMDOK`09`09'0' X#define`09C_DATA`09`09'1' X#define`09C_INIT`09`09'2' X#define`09C_EXIT`09`09'3' X#define`20C_FLUSH`09`09'4' X#define`09C_NOECHO`09'5' X#define`20C_PROMPT`09'6' X#define`09C_ABORT`09`09'7' X#define`20C_REDIR`09`09'8' X#define`20C_PIPE`09`09'9' X#define`09C_CMDERR`09'a' X#define`09C_BADCMD`09'b' X#define`20C_EXECUTE`09'c' X Xstruct`20in_addr X`7B X`20`20`20`20union X`20`20`20`20`7B X`20`20`20`20`20`20`20`20struct X`20`20`20`20`20`20`20`20`7B X`20`20`20`20`20`20`20`20`20`20`20`20unsigned`20char`20s_b1, X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20s_b2, X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20s_b3, X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20s_b4; X`20`20`20`20`20`20`20`20`7D`20S_un_b; X X`20`20`20`20`20`20`20`20struct X`20`20`20`20`20`20`20`20`7B X`20`20`20`20`20`20`20`20`20`20`20`20unsigned`20short`20s_w1, X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20s_w2; X`20`20`20`20`20`20`20`20`7D`20S_un_w; X X`20`20`20`20`20`20`20`20unsigned`20long`20S_addr; X X`20`20`20`20`7D`20S_un; X`7D; X X#define`20s_addr`20`20S_un.S_addr X#define`20NOEXECMACRO`20"there`20once`20was`20a`20little`20pig." X Xstruct`20sockaddr_in X`7B X`20`20`20`20short`20sin_family; X`20`20`20`20unsigned`20short`20sin_port; X`20`20`20`20struct`20in_addr`20sin_addr; X`20`20`20`20char`20sin_zero`5B8`5D; X`7D; X X#define`20INTRO`20"The`20Grand`20Quacker`20of`20duckland`20greets`20you`5C! V`5Cn" X#define`20SIGNATURE`20"QUACK`5C!`5CnQUACK`5C!`5Cn`5C." X X#define`20HASHSIZE`20200`09`09/*`20number`20of`20macros`20*/ Xstruct`20nlist`20`7B X`09struct`20nlist`20*next; X`09char`20*name; X`09char`20*defn; X`7D; X Xstatic`20struct`20nlist`20*hashtab`5BHASHSIZE`5D; X Xstruct`09fn`20`7B X`09int`09(*func)(); X`09char`09*name; X`09int`09value; X`7D; $ call unpack CLIENT.H;22 - 1113960359 "FORMAT STREAM_LF;CARRIAGE_CONTROL CARRIAGE_RETURN" $! $ create 'f' Xaddgame`20teaching3.physics.ox.ac.uk`203339`20Starfire`20colonel`20blackstar Xaddgame`20chainsaw.ecn.purdue.edu`201617`20duckland`20quackers`20duck3 Xaddgame`20teaching3.physics.ox.ac.uk`203339`20duckland`20quackers`20duck2 Xaddgame`20forestburg.cs.ualberta.ca`201617`20duckland`20quackers`20duck Xalias`20c1`20"cen`20#1" Xalias`20c2`20"cen`20#2" Xalias`20c3`20"cen`20#3" Xalias`20c4`20"cen`20#4" Xalias`20c5`20"cen`20#5" Xalias`20c6`20"cen`20#6" Xalias`20c7`20"cen`20#7" Xalias`20c8`20"cen`20#8" Xalias`20c9`20"cen`20#9" Xalias`20c0`20"cen`20#0" Xalias`20c10`20"cen`20#10" Xalias`20c11`20"cen`20#11" Xalias`20c12`20"cen`20#12" Xalias`20c13`20"cen`20#13" Xalias`20c14`20"cen`20#14" Xalias`20c15`20"cen`20#15" Xalias`20c16`20"cen`20#16" Xalias`20c17`20"cen`20#17" Xalias`20d-`20"des`20?des=-`20#`20+" Xalias`20m0`20"map`20#0" Xalias`20m1`20"map`20#1" Xalias`20m2`20"map`20#2" Xalias`20m3`20"map`20#3" Xalias`20m4`20"map`20#4" Xalias`20m5`20"map`20#5" Xalias`20m6`20"map`20#6" Xalias`20m7`20"map`20#7" Xalias`20m8`20"map`20#8" Xalias`20m9`20"map`20#9" Xalias`20m10`20"map`20#10" Xalias`20m11`20"map`20#19" Xalias`20m12`20"map`20#19" Xalias`20m13`20"map`20#19" Xalias`20m14`20"map`20#19" Xalias`20m15`20"map`20#19" Xalias`20m16`20"map`20#19" Xalias`20m17`20"map`20#19" Xalias`20auto`20"$auto" Xalias`20dd`20"dump`20#`20>`20dump" Xalias`20feed`20"$feed" Xalias`20bulls`20"$most`20TELEX.BULLETINS`20" Xalias`20PRO`20"$most`20telex.production" Xalias`20level`20"$level" Xalias`20mm`20"map`20#" Xalias`20vers`20"ver`20>`20ver" Xalias`20pros`20"pro`20#`20>`20pro" Xalias`20p.m`20`20"exec`20p.m" Xalias`20mmvr`20"$mmvr`20-o`20m.m" Xalias`20sim`20"$@`5B-`5Dsim" Xalias`20split`20"$gawk`20-fempbin:tel.awk`20foo" Xalias`20veload`20"exec`20ve.load" Xalias`20u.m`20"exec`20u.m" Xalias`20distrib`20"exec`20dist.out" Xalias`20che`20"$pipe`20gawk`20-fempbin:che.awk`20telex.production`20>che." Xalias`20do`20"exec`20`5B-`5Ddo.exec" Xalias`20fed`20"exec`20feed.exec" Xalias`20annon`20"$most`20TELEX.ANNOUNCEMENT" Xalias`20tels`20"$most`20TELEX.TELEGRAMS" Xalias`20level.out`20"exec`20level.out" Xalias`20nation`20"$pipe`20cat`20nat.`20`7Cnation" Xalias`20nats`20"nat`20>`20nat" Xalias`20Pro`20"$pro`20pro" Xalias`20pmvr`20"$pmvr`20-o`20p.m`20'-O'`20'-P'`2050`20'-M'`2010" Xalias`20m.m`20"exec`20m.m" Xalias`20starve`20"$@starve" Xalias`20Read`20"read`20y`20>foo" Xalias`20ve.exec`20"exec`20ve.exec" Xalias`20umvr`20"$umvr`20-o`20u.m" Xalias`20ve`20$ve $ call unpack CLIENT.OPTS;3 - 961618716 "FORMAT STREAM_LF;CARRIAGE_CONTROL CARRIAGE_RETURN" $! $ create 'f' XCompiles`20under:`20Wollengong,`20Multinet,`20UCX X XWOLLENGONG`20compiling`20instructions X`20`20`20`20To`20compile`20the`20client`20from`20the`20source`20code, X`09$`20define`20sys`20twg$tcp:`5Bnetdist.include.sys`5D X`09$`20define`20vms`20twg$tcp:`5Bnetdist.include.vms`5D X`09$`20cc/define=wollengong`20client X`09$`20link`20client,tcp$lib:twglib/lib,sys$input/opt`20`20 X`20`20`20`20`20`20`20`20sys$share:vaxcrtl/share`20 X X`20`20`20(The`20sys$share`20goes`20on`20the`20line`20immediately`20after`20typ Ving`20the`20link`20command. X`20`20`20`20The`20entire`20",sys$input/optsys$share:vaxcrtl/share"`20i Vs`20optional.) X`20`20`20 X`20`20`20`20Old`20versions`20of`20Wollengong`20have`20a`20different`20set`20of V`20libraries`20in`20tcp$lib. X`20`20`20`20You'll`20have`20to`20use`20all`20of`20them`20(and`20one`20twice, V`20I`20think)`20and`20ignore`20compiler X`20`20`20`20warnings. X`20`20 X=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= X XUCX`20compiling`20instructions X`09$`20cc/define=ucx`20client X`09$`20link`20client,sys$library:ucx$ipc/lib,sys$input/opt`20`20`20`20 V X`20`20`20`20`20`20`20`20sys$share:vaxcrtl/share`20 X X`20(The`20sys$share`20goes`20on`20the`20line`20immediately`20after`20typing V`20the`20link`20command. X`20`20The`20entire`20",sys$input/optsys$share:vaxcrtl/share"`20is`20op Vtional.) X X=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= X XMULTINET`20compiling`20instructions X`09$`20define`20sys`20multinet_root:`5Bmultinet.include.sys`5D X`09$`20define`20vms`20multinet_root:`5Bmultinet.include.vms`5D X`09$`20define`20multi`20multinet_root:`5Bmultinet.include`5D X`09$`20cc/define=multinet`20client X`09$`20link`20client,sys$input/opt X`20`20`20`20`20`20`20`20sys$share:vaxcrtl/share X`20`20`20`20`20`20`20`20multinet:multinet_socket_library/share X`20`20`20`20`20`20`20 X`20(The`20sys$share`20goes`20on`20the`20line`20immediately`20after`20typing V`20the`20link`20command. X`20`20The`20entire`20",sys$input/optsys$share:vaxcrtl/share"`20is`20op Vtional.) $ call unpack COMPILING.INFO;3 - 320556182 "FORMAT STREAM_LF;CARRIAGE_CONTROL CARRIAGE_RETURN" $! $ create 'f' X---------------------- XEmpire`20client`20(VAX/VMS) Xby`20Mike`20Kienenberger`20and`20Donald`20Harper XWollengong`20TCP/IP`20V3`20`20(will`20work`20for`20Multinet`20with`20numeric V`20addresses) X(any`20use`20of`20this`20program`20is`20subject`20to`20whatever`20legal`20what Vevers`20that X`20Wollengong`20has`20chose`20to`20implement.`20`20I`20have`20no`20idea`20what V`20legal X`20nonsense`20is`20required`20for`20you`20to`20be`20able`20to`20use`20this`20c Vode`20for`20any X`20particular`20purpose.`20`20Use`20at`20your`20own`20risk.`20`20I've`20distri Vbuted X`20it`20solely`20so`20that`20you`20can`20see`20how`20tcp/ip`20works`20:-) X(some`20ideas`20borrowed`20from`20Dave`20Pare`20and`20Kernighan`20`26`20Ritche V) XFXMLK@ALASKA.bitnet XFSMLK1%alaska.bitnet@cunyvm.cuny.edu Xdon@pegagus.phys.uh.edu Xst1ck@jetson.uh.edu X---------------------- XVersion`201.0 XJan`201st,`201991 X(it`20was`20the`20best`20I`20felt`20like`20doing`20in`20the`20last`20few`20hou Vrs.`20`20It's X`20now`202:30`20am.`20`20Live`20with`20it!) X---------------------- XJan`203rd,`201991 X Xversion`201.1`20note`20-`20fixed`20problem`20(I`20think)`20that`20caused Xlarge`20outputs`20to`20be`20saved`20in`20a`20nonstandard`20empire-client Xformat.`20`20`20This`20should`20make`20output`20files`20compatible`20with Xany`20program`20used`20to`20reading`20the`20unix`20format. X---------------------- X---------------------- XVersion`202.0! XJun`203rd,`201991 XAt`20long`20last,`20I`20settle`20down`20to`20write`20the`20syncronous`20versio Vn. XThe`20asyncronous`20version`20wasn't`20good`20enough. XBesides,`20tomorrow`20a`20new`20empire`20game`20starts`20(3rd`20Banjo)`20and V`20I`20want`20to X---------------------- XJan`2016th,`201991 Xversion`202.1`20note XFixed`20client.opts`20file`20so`20that`20you`20can`20have`20a`20lot`20of`20gam Ves`20`20going`20at Xthe`20same`20time`20without`20making`20a`20lot`20of`20changes. X---------------------- XNov`2017th,`201991 Xversion`202.2`20note XFinally`20decided`20to`20make`20it`20so`20that`20game-names`20don't`20have`20t Vo`20be`20lowercase X---------------------- XDec`206th,`201991 Xversion`202.3`20note XMade`20it`20so`20that`20it`20could`20be`20compiled`20under`20UCX XChanged`20way`20that`20the`20hostname`20was`20looked`20up`20(might`20fix`20Mul Vtinet`20problem) X(also`20fixed`20accvio`20if`20hostname`20was`20not`20found) X---------------------- XDec`208th,`201991 Xversion`202.4`20note XMade`20it`20so`20that`20it`20could`20be`20compiled`20under`20Multinet`20since V`20V2.3`20won't Xwork`20under`20multinet`20at`20all`20anymore X---------------------- XJan`203rd,`201992 Xversion`202.5 XWeird`20wollengong`20gethostbyname`20doesn't`20work`20with`20numeric`20address Ves. Xwent`20back`20to`20old`20rhost`20for`20wollengong. X---------------------- XMay`2025th,`201992 Xversion`203.0 XAdded`20ability`20to`20spawn`20a`20new`20DCL`20process.`20st1ck@jetson.uh.edu X---------------------- XJun`2011th,`201992 Xversion`203.1 XFixed`20all`20file`20open`20errors.`20`20Client`20would`20leave`20open`20files V`20while`20running. Xst1ck@jetson.uh.edu X---------------------- XAug`2018th,`201992 Xversion`203.2 XAdded`20predefined`20macros Xst1ck@jetson.uh.edu X---------------------- XAug`2020th,`201992 Xversion`203.3 Xfixed`20to`20spawn`20commands`20while`20still`20running. Xst1ck@jetson.uh.edu X---------------------- XAug`2031st,`201992 Xversion`203.4 Xfixed`20macr`7B`20returns`20so`20that`20can`20spawn`20with`20macros. Xst1ck@jetson.uh.edu X---------------------- XFeb`206th,`201993 Xversion`203.5 Xinternal`20cleaning`20of`20code;`20removed`20backwards-compatablity`20with`20v V1.x XDHarerp@uh.edu X---------------------- XFeb`206th,`201993 Xversion`203.6 Xadded`20a`20interal`20mail`20editor`20call`20to`20tpu. Xst1ck@jetson.uh.edu X---------------------- XFeb`2011th,`201993 Xversion`203.7 Xchanged`20macro`20code`20to`20accept`20aliasing`20commands`20instead`20of`20on Ve`20char`20macros. Xst1ck@jetson.uh.edu X---------------------- XFeb`2021st,`201993 Xversion`203.8 Xcombined`20client.opts`20and`20client.macros,`20changed`20format`20of`20game V`20def. Xst1ck@jetson.uh.edu X---------------------- XMar`2014th,`201993 Xversion`203.9 Xfixed`20sync`20problem`20on`20execs.`20`20this`20should`20fix`20telex`20editor V. Xst1ck@jetson.uh.edu X---------------------- XMar`2015th,`201993 Xversion`203.10 Xfixed`20bug`20when`20cleaned`20code.`20`20re-fixed`20bug`20in`20exec.`20`20fix Ved`20file`20redirection`20to Xbe`20more`20like`20empclient-1.1 Xst1ck@jetson.uh.edu X---------------------- XApr`2026th,`201993 Xversion`204.0 Xcleaned`20a`20few`20minor`20appearnce`20bugs,`20finished`20client.doc,`20and V`20made`20ready Xfor`20release.`20`20Enjoy,`20world! Xst1ck@jetson.uh.edu $ call unpack HISTORY.CLIENT;7 - 1612015280 "FORMAT STREAM_LF;CARRIAGE_CONTROL CARRIAGE_RETURN" $! $ create 'f' X`09$`20define`20sys`20multinet_root:`5Bmultinet.include.sys`5D X`09$`20define`20vms`20multinet_root:`5Bmultinet.include.vms`5D X`09$`20define`20multi`20multinet_root:`5Bmultinet.include`5D X`09$`20cc/define=multinet`20client X`09$`20cc/define=multinet`20readit X`09$`20link`20client,readit,sys$input/opt X`20`20`20`20`20`20`20`20sys$share:vaxcrtl/share X`20`20`20`20`20`20`20`20multinet:multinet_socket_library/share $ call unpack MULTINET.COM;2 - 1802911714 "FORMAT STREAM_LF;CARRIAGE_CONTROL CARRIAGE_RETURN" $! $ create 'f' X#include`20"client.h" X Xchar`20*readit(server_socket) Xint`20server_socket; X`7B X`09int`20status,`20count; X`09char`20c; X`09char`20buffer`5B1024`5D; X`09char`20*msg; X X`09void`20*malloc(); X`09char`20*strcpy(); X`09int`20sys$qiow(); X X`09count`20=`200; X`09c`20=`200; X`09while`20(c`20!=`2010) X`09`7B X`09`09alarm`20(`2060`20); X`09`09status`20=`20recv(server_socket,`20`26c,`201,`200); X`09`09buffer`5Bcount++`5D`20=`20c; X`09`7D X`09buffer`5Bcount`5D`20=`20'`5C0'; X`09msg`20=`20(char`20*)`20malloc`20(strlen`20(buffer)); X`09strcpy`20(msg,`20buffer); X`09alarm`20(`200`20); X`09return`20msg; X`7D $ call unpack READIT.C;7 - 2015167910 "FORMAT STREAM_LF;CARRIAGE_CONTROL CARRIAGE_RETURN" $! $ create 'f' X`20`2020-MAR-1993`2015:05:48 X XMaybe`20figure`20out`20how`20to`20change`20default`20via`20c`20to`20help`20kee Vp`20a`20dir`20per`20game? X XIntergrate`20tools`20-`20??`20`20Maybe...`20`20`5Bnot`20for`20a`20while`5D X XIP`20numeric`20address`20-`20Mike`20claims`20it`20works,`20but`20don't..need V`20to`20look`20into`20it. X XClean`20code`20-`20create`20functions,`20split`20network`20stuff`20into`20one V`20file`20for`20use`20with Xtools,`20clean`20up`20header. X Xrewrite`20the`20docs`20to`20explain`20all`20the`20new`20features,`20and`20bugs V. X Xadd`20pipe`20junk. X XMake`20a`20com`20file`20for`20distribution... X Xmake`20alias`20expand`20`26`20deal`20with`20vars. X Xadd`20something`20like`20readlin.a`20to`20this... X X $ call unpack TO.DO;7 - 1024540679 "FORMAT STREAM_LF;CARRIAGE_CONTROL CARRIAGE_RETURN" $! $ create 'f' X`09$`20cc/define=ucx`20client X`09$`20cc/define=ucx`20readit X`09$`20link`20client,readit,sys$library:ucx$ipc/lib,sys$input/opt X`20`20`20`20`20`20`20`20sys$share:vaxcrtl/share $ call unpack UCX.COM;2 - 828797566 "FORMAT STREAM_LF;CARRIAGE_CONTROL CARRIAGE_RETURN" $! $ create 'f' X`09$`20define`20sys`20twg$tcp:`5Bnetdist.include.sys`5D X`09$`20define`20vms`20twg$tcp:`5Bnetdist.include.vms`5D X`09$`20cc/define=wollengong`20client X`09$`20cc/define=wollengong`20readit X`09$`20link`20client,readit,tcp$lib:twglib/lib,sys$input/opt`20`20 X`20`20`20`20`20`20`20`20sys$share:vaxcrtl/share`20 $ call unpack WOLLENGONG.COM;2 - 1343755847 "FORMAT STREAM_LF;CARRIAGE_CONTROL CARRIAGE_RETURN" $ v=f$verify(v) $ exit