--- /home/cortense/down/mud/bases/smaug14/src/Makefile	Tue Jul 28 21:25:41 1998
+++ Makefile	Sat Mar 27 18:59:02 1999
@@ -25,7 +25,8 @@
           requests.o reset.o save.o shops.o skills.o special.o tables.o \
           track.o update.o grub.o stat_obj.o ban.o services.o planes.o \
           imm_host.o imc.o imc-mail.o imc-interp.o imc-util.o imc-config.o \
-          imc-events.o imc-version.o imc-mercbase.o ice.o icec.o icec-mercbase.o
+          imc-events.o imc-version.o imc-mercbase.o ice.o icec.o icec-mercbase.o \
+	  oedit.o redit.o medit.o
 
 C_FILES = act_comm.c act_info.c act_move.c act_obj.c act_wiz.c boards.c \
 	  build.c clans.c comm.c comments.c const.c db.c deity.c fight.c \
@@ -34,10 +35,11 @@
           requests.c reset.c save.c shops.c skills.c special.c tables.c \
           track.c update.c grub.c stat_obj.c ban.c services.c planes.c \
           imm_host.c imc.c imc-mail.c imc-interp.c imc-util.c imc-config.c \
-          imc-events.c imc-version.c imc-mercbase.c ice.c icec.c icec-mercbase.c
+          imc-events.c imc-version.c imc-mercbase.c ice.c icec.c icec-mercbase.c \
+	  oedit.c redit.c medit.c
 
 H_FILES = mud.h bet.h imc-config.h imc-mercbase.h imc-mercdefs.h imc.h \
-	  ice.h icec.h icec-mercbase.h
+	  ice.h icec.h icec-mercbase.h olc.h
 
 
 all:
--- /home/cortense/down/mud/bases/smaug14/src/comm.c	Tue Jul 28 21:25:31 1998
+++ comm.c	Sat Mar 27 18:52:49 1999
@@ -1461,6 +1461,18 @@
 	close_socket( d, TRUE );
 	return;
 
+    case CON_OEDIT:
+        oedit_parse( d, argument );
+        break;
+
+    case CON_REDIT:
+        redit_parse( d, argument );
+        break;
+
+    case CON_MEDIT:
+        medit_parse( d, argument );
+        break;
+
     case CON_GET_NAME:
 	if ( argument[0] == '\0' )
 	{
@@ -2919,6 +2931,8 @@
 	if ( type == TO_CANSEE && ( to == ch || 
 	    (!IS_IMMORTAL(to) && !IS_NPC(ch) && (xIS_SET(ch->act, PLR_WIZINVIS) 
 	    && (get_trust(to) < (ch->pcdata ? ch->pcdata->wizinvis : 0) ) ) ) ) )
+	    continue;
+	if ( to->desc && is_inolc(to->desc) )
 	    continue;
 
         if ( IS_IMMORTAL(to) )
--- /home/cortense/down/mud/bases/smaug14/src/mud.h	Tue Jul 28 21:25:17 1998
+++ mud.h	Sat Mar 27 19:03:07 1999
@@ -152,6 +149,7 @@
 typedef struct	extended_bitvector	EXT_BV;
 typedef	struct	lcnv_data		LCNV_DATA;
 typedef	struct	lang_data		LANG_DATA;
+typedef	struct	olc_data		OLC_DATA;
 
 
 /*
@@ -666,7 +664,8 @@
   CON_GET_NEW_RACE,	CON_GET_EMULATION,	CON_EDITING,
   CON_GET_WANT_RIPANSI,	CON_TITLE,		CON_PRESS_ENTER,
   CON_WAIT_1,		CON_WAIT_2,		CON_WAIT_3,
-  CON_ACCEPTED,         CON_GET_PKILL,		CON_READ_IMOTD
+  CON_ACCEPTED,         CON_GET_PKILL,		CON_READ_IMOTD,
+  CON_REDIT,		CON_OEDIT,		CON_MEDIT,
 } connection_types;
 
 /*
@@ -718,6 +717,7 @@
     char *		user;
     int			newstate;
     unsigned char	prevcolor;
+    OLC_DATA *		olc;
 };
 
 
@@ -3409,6 +3409,7 @@
 extern	char *	const	defense_flags	[];
 extern	char *	const	attack_flags	[];
 extern	char *	const	area_flags	[];
+extern  char *  const   container_flags []; /* OasisOLC */
 extern	char *	const	ex_pmisc	[];
 extern	char *	const	ex_pwater	[];
 extern	char *	const	ex_pair		[];
@@ -4023,6 +4024,14 @@
 DECLARE_DO_FUN( do_mpmusicat	);
 
 /*
+ * OasisOLC Declarations
+ */
+DECLARE_DO_FUN( do_omedit	);
+DECLARE_DO_FUN( do_oredit	);
+DECLARE_DO_FUN( do_ooedit	);
+DECLARE_DO_FUN( do_ocopy	);
+
+/*
  * Spell functions.
  * Defined in magic.c.
  */
@@ -4906,6 +4915,14 @@
 /* newscore.c */
 char *  get_class 	args( (CHAR_DATA *ch) );
 char *  get_race 	args( (CHAR_DATA *ch) );
+
+/* olc stuff (oedit.c redit.c medit.c) */
+void    medit_parse     args( ( DESCRIPTOR_DATA *d, char *arg ) );
+void    redit_parse     args( ( DESCRIPTOR_DATA *d, char *arg ) );
+void    oedit_parse     args( ( DESCRIPTOR_DATA *d, char *arg ) );
+
+bool    is_inolc        args( ( DESCRIPTOR_DATA *d ) );
+void    cleanup_olc     args( ( DESCRIPTOR_DATA *d ) );
 
 #undef	SK
 #undef	CO
--- /home/cortense/down/mud/bases/smaug14/src/tables.c	Tue Jul 28 06:34:10 1998
+++ tables.c	Sat Mar 27 18:52:49 1999
@@ -470,6 +470,7 @@
 	break;
     case 'o':
 	if ( !str_cmp( name, "do_oassign" ))		return do_oassign;
+	if ( !str_cmp( name, "do_ocopy" ))		return do_ocopy;
 	if ( !str_cmp( name, "do_ocreate" ))		return do_ocreate;
 	if ( !str_cmp( name, "do_odelete" ))		return do_odelete;
 	if ( !str_cmp( name, "do_ofind" ))		return do_ofind;
@@ -477,7 +478,9 @@
 	if ( !str_cmp( name, "do_oinvoke" ))		return do_oinvoke;
 	if ( !str_cmp( name, "do_oldscore" ))		return do_oldscore;
 	if ( !str_cmp( name, "do_olist" ))		return do_olist;
+	if ( !str_cmp( name, "do_omedit" ))		return do_omedit;
 	if ( !str_cmp( name, "do_omenu" ))		return do_omenu;
+	if ( !str_cmp( name, "do_ooedit" ))		return do_ooedit;
 	if ( !str_cmp( name, "do_opedit" ))		return do_opedit;
 	if ( !str_cmp( name, "do_open" ))		return do_open;
 /*	if ( !str_cmp( name, "do_opentourney" ))	return do_opentourney; */
@@ -486,6 +489,7 @@
 	if ( !str_cmp( name, "do_order" ))		return do_order;
 	if ( !str_cmp( name, "do_orders" ))		return do_orders;
 	if ( !str_cmp( name, "do_ordertalk" ))		return do_ordertalk;
+	if ( !str_cmp( name, "do_oredit" ))		return do_oredit;
 	if ( !str_cmp( name, "do_oset" ))		return do_oset;
 	if ( !str_cmp( name, "do_ostat" ))		return do_ostat;
 	if ( !str_cmp( name, "do_outcast" ))		return do_outcast;
@@ -1081,6 +1085,7 @@
     if ( skill == do_noteroom )		return "do_noteroom";
     if ( skill == do_nuisance )		return "do_nuisance";
     if ( skill == do_oassign )		return "do_oassign";
+    if ( skill == do_ocopy )		return "do_ocopy";
     if ( skill == do_ocreate )		return "do_ocreate";
     if ( skill == do_odelete )		return "do_odelete";
     if ( skill == do_ofind )		return "do_ofind";
@@ -1088,7 +1093,9 @@
     if ( skill == do_oinvoke )		return "do_oinvoke";
     if ( skill == do_oldscore )		return "do_oldscore";
     if ( skill == do_olist )		return "do_olist";
+    if ( skill == do_omedit )		return "do_omedit";
     if ( skill == do_omenu )		return "do_omenu";
+    if ( skill == do_ooedit )		return "do_ooedit";
     if ( skill == do_opedit )		return "do_opedit";
     if ( skill == do_open )		return "do_open";
 /*  if ( skill == do_opentourney )	return "do_opentourney"; */
@@ -1097,6 +1104,7 @@
     if ( skill == do_order )		return "do_order";
     if ( skill == do_orders )		return "do_orders";
     if ( skill == do_ordertalk )	return "do_ordertalk";
+    if ( skill == do_oredit )		return "do_oredit";
     if ( skill == do_oset )		return "do_oset";
     if ( skill == do_ostat )		return "do_ostat";
     if ( skill == do_outcast )		return "do_outcast";
--- /home/cortense/down/mud/bases/smaug14/src/build.c	Tue Jul 28 06:30:55 1998
+++ build.c	Sat Mar 27 19:02:05 1999
@@ -75,6 +75,14 @@
 "hidden", "poisoned", "covering", "deathrot", "buried", "prototype", 
 "nolocate", "groundrot" };
 
+char * const   container_flags [] =
+{
+"closeable", "pickproof", "closed", "locked", "eatkey", "r1", "r2", "r3",
+"r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15",
+"r16", "r17", "r18", "r19", "r20", "r21", "r22", "r23", "r24", "r25", "r26",
+"r27"
+};
+
 char *	const	mag_flags	[] =
 {
 "returning", "backstabber", "bane", "loyal", "haste", "drain",