diff --git a/icpl/src/pane.c b/icpl/src/pane.c
index 39baee9c7cc0b718676a282f53540b66c426b3cc..4272e888c208a3e6311ef936a1b9fdb517e85ba5 100755
--- a/icpl/src/pane.c
+++ b/icpl/src/pane.c
@@ -1,16 +1,44 @@
+/**brief**************************************************************/
+/*                                                                   */
+/*         MEMBER:     PANE             TYPE: C11SCE                 */
+/*         PROGRAMMER: COFFEE           <COFFEE@UCC.GU.UWA.EDU.AU>   */
+/*                                                                   */
+/*         PURPOSE:                                                  */
+/*                                                                   */
+/*********************************************************************/
+/**OUTLINE************************************************************/
+/*                                                                   */
+/*********************************************************************/
+
+/*********************************************************************/
+/*                            INCLUDES                               */
+/*********************************************************************/
 #include "pane.h"
-#define INPT A_UNDERLINE | COLOR_PAIR(6)
-#define TEXT(c) A_PROTECT | COLOR_PAIR(c)
+
+/*********************************************************************/
+/*                        CONSTANT LITERALS                          */
+/*********************************************************************/
 #define HGT 23
 
-struct {
+/*********************************************************************/
+/*                     FUNCTION DECLARATIONS                         */
+/*********************************************************************/
+void draw(Screen *scr);
+
+/*********************************************************************/
+/*                      LOCAL  DECLARATIONS                          */
+/*********************************************************************/
+struct STATUS{
   bool isInsert;
-  char inhibit[9];
+  char *inhibit;
 }status = {
   false,
   "",
 };
 
+/*********************************************************************/
+/*               PANE_A100_DRAW                                      */
+/*********************************************************************/
 void draw(Screen *scr) {
   size_t oldy, oldx;
   getyx(stdscr, oldy, oldx);
@@ -70,42 +98,23 @@ void init() {
 
 }
 
-void draw_status(int y, int x) {
+void draw_status() {
+  int x, y;
+  getyx(stdscr,y, x);
+
   attron(TEXT(2));
   mvhline(HGT,0,'_',80);
   mvaddstr(HGT + 1, 8, status.inhibit);
   mvaddstr(HGT + 1, 52, (status.isInsert ? "I" : "OVR"));
   mvprintw(HGT+1, 74, "%02i,%02i", y + 1, x + 1);
   standend();
+	move(y,x);
+	refresh();
 }
 
-#define TXTOPT "Option ===>"
-#define TXTCMD "Command ===>"
-#define TXTHDR "ISPF Primary Option Menu"
-
-Field menuFlds[] = {
- /* TYPE |ROW|COL|LEN|  TXET       | ATTR     | NXT */
- /******************* MENU BAR **********************/
-  { BTN  ,  0,  3,  0,"Menu"       , A_NORMAL ,     },
-  { BTN  ,  0,  9,  0,"Utilities"  , A_NORMAL ,     },
-  { BTN  ,  0, 20,  0,"Compilers"  , A_NORMAL ,     },
-  { BTN  ,  0, 31,  0,"Options"    , A_NORMAL ,     },
-  { BTN  ,  0, 40,  0,"Status"     , A_NORMAL ,     },
-  { BTN  ,  0, 48,  0,"Help"       , A_NORMAL ,     },
-
- /******************** INPUTS ***********************/
-  { INP  ,  3, 13, 66, ""          , INPT     ,  -1 },
-
- /******************** LABELS ***********************/
-  { LBL  ,  2, 28,  0,TXTHDR       , TEXT(4)  ,     },
-  { LBL  ,  3,  1,  0,TXTOPT       , TEXT(2)  ,     },
-
- /******************** RULERS ***********************/
-  { RLR,  1,  1,   78, "q"         , TEXT(4)  ,     },
-  {END}
-};
 
-Screen* init_screen(Field *fields) {
+
+Screen* buildScreen(Field *fields) {
   Screen* scr;
   scr = (Screen*) calloc(1, sizeof(Screen));
 
@@ -119,24 +128,21 @@ Screen* init_screen(Field *fields) {
 }
 
 
-int start() {
+int start(Screen *scr) {
   init();
-  Screen *menu = init_screen(menuFlds);
 
-  draw(menu);
+  draw(scr);
   int x, y;
   move(3, 13);
   getyx(stdscr,y, x);
-  draw_status(y, x);
+  draw_status();
   int chr = mvinch(y,x); // save attr
-  chtype clr = chr & A_COLOR;
   chtype attr = chr & A_ATTRIBUTES;
   chgat(1, A_REVERSE | attr, 0, NULL); // set block
 
   while (1) {
 
     int ch = getch();
-    //chgat(1, attr, clr, NULL);
 
     switch (ch) {
       case KEY_LEFT:
@@ -159,20 +165,29 @@ int start() {
       case KEY_STAB:
       case KEY_BTAB:
       case KEY_END:
+			case 10:
+			case KEY_ENTER:
+				status.inhibit = "X - SYSTEM";
+				draw_status();
+
+				scr = scr->submit(scr);
+
+				status.inhibit = "          ";
+				draw_status();
+
+			 	break;
       case 'q':
         goto cleanup;
       default:
         break;
     }
     addch(chr);
-    draw_status(y, x);
     chr = mvinch(y,x); // save attr
-    clr = chr & A_COLOR;
     attr = chr & A_ATTRIBUTES;
     chgat(1, A_REVERSE | attr, 0, NULL);
-    refresh();
+    draw_status();
   }
  cleanup:
   endwin();
   return 0;
-}
\ No newline at end of file
+}
diff --git a/icpl/src/pane.h b/icpl/src/pane.h
index 1fb99a7c9f62be0b0475b9c6ba796cb10f9b85fc..92ff8aa1e974734aa011ff2c4cd6d942b1a5a317 100755
--- a/icpl/src/pane.h
+++ b/icpl/src/pane.h
@@ -1,18 +1,68 @@
+/**COPY***************************************************************/
+/*                                                                   */
+/*  COPYRIGHT (C) 2019 ZACK WONG                                     */
+/*  THIS PROGRAM IS FREE SOFTWARE: YOU CAN REDISTRIBUTE IT AND/OR    */
+/*  MODIFY IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS   */
+/*  BIN PUBLISHED BY THE FREE SOFTWARE FOUNDATION, EITHER VERSION 3  */
+/*  OF THE LICENSE, OR (AT YOUR OPTION) ANY LATER VERSION.           */
+/*                                                                   */
+/*  THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL,  */
+/*  BUT WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF   */
+/*  MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  SEE THE    */
+/*  GNU GENERAL PUBLIC LICENSE FOR MORE DETAILS.                     */
+/*                                                                   */
+/*  YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC        */
+/*  LICENSE ALONG WITH THIS PROGRAM. IF NOT, SEE                     */
+/*  <HTTPS://WWW.GNU.ORG/LICENSES/>.                                 */
+/*                                                                   */
+/*********************************************************************/
+/**BRIEF**************************************************************/
+/*                                                                   */
+/*           MEMBER : PANE            TYPE: C11HDR                   */
+/*       PROGRAMMER : COFFEE          DATE: 28 JUL 2019              */
+/*          CONTACT : <COFFEE@UCC.GU.UWA.EDU.AU>                     */
+/*                                                                   */
+/*      DESCRIPTION : ISPF MAIN MENU AND ENTRY POINT.                */
+/*                                                                   */
+/*********************************************************************/
+/**OUTLINE************************************************************/
+/*                                                                   */
+/*********************************************************************/
+/**MAINTAINANCE HISTORY***********************************************/
+/*   DD MMM YYYY     NNNNNNNNN         <XXXXXXXXXXXXXXXXXXXXXXXXX>   */
+/*   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   */
+/*                                                                   */
+/*********************************************************************/
 #ifndef PANE_H
 #define PANE_H
 
+/*********************************************************************/
+/*                            INCLUDES                               */
+/*********************************************************************/
 #include <curses.h>
 #include <stdint.h>
 #include <malloc.h>
 #include <string.h>
 #include <stdbool.h>
 
+/*********************************************************************/
+/*                        PREPROCESSOR DEFS                          */
+/*********************************************************************/
+#define TEXT(c) A_PROTECT | COLOR_PAIR(c)
+#define INPT A_UNDERLINE | COLOR_PAIR(6)
+
+/*********************************************************************/
+/*                        CONSTANT LITERALS                          */
+/*********************************************************************/
 #define LBL 0
 #define BTN 1
 #define RLR 2
 #define INP 3
 #define END 0b1111
 
+/*********************************************************************/
+/*                         TYPE DEFINITIONS                          */
+/*********************************************************************/
 typedef unsigned char byte;
 
 typedef struct Field {
@@ -38,10 +88,15 @@ typedef struct Screen {
   Field* inps;
 
   Mask cell[80][43];
-  void (*submit)(char*);
+	bool update;
+  struct Screen* (*submit)(struct Screen*);
 }Screen;
 
 
-extern int start();
-void draw(Screen *scr);
-#endif
\ No newline at end of file
+/*********************************************************************/
+/*                            EXPORTS                                */
+/*********************************************************************/
+extern void init();
+extern int start(Screen* scr);
+extern Screen* buildScreen(Field *fields);
+#endif
diff --git a/icpl/tags b/icpl/tags
index a065ce7343ec6c24d79101c42bf933cc044d2774..fd7a937008bfa8a72d390cb1d5de2a41a6fcae4e 100644
--- a/icpl/tags
+++ b/icpl/tags
@@ -14,7 +14,7 @@ Field	src/pane.h	/^} Field;$/;"	t	typeref:struct:Field
 HEADERS	Makefile	/^HEADERS = $(wildcard src\/*.h)$/;"	m
 HGT	src/pane.c	/^#define HGT /;"	d	file:
 INP	src/pane.h	/^#define INP /;"	d
-INPT	src/pane.c	/^#define INPT /;"	d	file:
+INPT	src/pane.h	/^#define INPT /;"	d
 LBL	src/pane.h	/^#define LBL /;"	d
 Mask	src/pane.h	/^typedef struct Mask {$/;"	s
 Mask	src/pane.h	/^}Mask;$/;"	t	typeref:struct:Mask
@@ -23,14 +23,12 @@ PANE_H	src/pane.h	/^#define PANE_H$/;"	d
 PROJECT	Makefile	/^PROJECT = icpl$/;"	m
 RLR	src/pane.h	/^#define RLR /;"	d
 SRC	Makefile	/^SRC	= $(wildcard src\/*.c)$/;"	m
+STATUS	src/pane.c	/^struct STATUS{$/;"	s	file:
 Screen	src/pane.h	/^typedef struct Screen {$/;"	s
 Screen	src/pane.h	/^}Screen;$/;"	t	typeref:struct:Screen
-TEXT	src/pane.c	/^#define TEXT(/;"	d	file:
-TXTCMD	src/pane.c	/^#define TXTCMD /;"	d	file:
-TXTHDR	src/pane.c	/^#define TXTHDR /;"	d	file:
-TXTOPT	src/pane.c	/^#define TXTOPT /;"	d	file:
-__anon7198f2f10108	src/pane.c	/^struct {$/;"	s	file:
+TEXT	src/pane.h	/^#define TEXT(/;"	d
 attr	src/pane.h	/^  chtype attr;$/;"	m	struct:Field	typeref:typename:chtype
+buildScreen	src/pane.c	/^Screen* buildScreen(Field *fields) {$/;"	f	typeref:typename:Screen *
 byte	src/pane.h	/^typedef unsigned char byte;$/;"	t	typeref:typename:unsigned char
 callback	src/pane.h	/^  void* (*callback)(char*);$/;"	m	struct:Field	typeref:typename:void * (*)(char *)
 cell	src/pane.h	/^  Mask cell[80][43];$/;"	m	struct:Screen	typeref:typename:Mask[80][43]
@@ -38,17 +36,14 @@ clean	Makefile	/^clean:$/;"	t
 debug	Makefile	/^debug: $(PROJECT)$/;"	t
 debug	Makefile	/^debug: CFLAGS += -g$/;"	t
 draw	src/pane.c	/^void draw(Screen *scr) {$/;"	f	typeref:typename:void
-draw_status	src/pane.c	/^void draw_status(int y, int x) {$/;"	f	typeref:typename:void
+draw_status	src/pane.c	/^void draw_status() {$/;"	f	typeref:typename:void
 fldid	src/pane.h	/^  short fldid;$/;"	m	struct:Mask	typeref:typename:short
 flds	src/pane.h	/^  Field* flds;$/;"	m	struct:Screen	typeref:typename:Field *
-inhibit	src/pane.c	/^  char inhibit[9];$/;"	m	struct:__anon7198f2f10108	typeref:typename:char[9]	file:
+inhibit	src/pane.c	/^  char *inhibit;$/;"	m	struct:STATUS	typeref:typename:char *	file:
 init	src/pane.c	/^void init() {$/;"	f	typeref:typename:void
-init_screen	src/pane.c	/^Screen* init_screen(Field *fields) {$/;"	f	typeref:typename:Screen *
 inps	src/pane.h	/^  Field* inps;$/;"	m	struct:Screen	typeref:typename:Field *
-isInsert	src/pane.c	/^  bool isInsert;$/;"	m	struct:__anon7198f2f10108	typeref:typename:bool	file:
+isInsert	src/pane.c	/^  bool isInsert;$/;"	m	struct:STATUS	typeref:typename:bool	file:
 len	src/pane.h	/^       , len;$/;"	m	struct:Field	typeref:typename:size_t
-main	src/pane.c	/^int main() {$/;"	f	typeref:typename:int
-menuFlds	src/pane.c	/^Field menuFlds[] = {$/;"	v	typeref:typename:Field[]
 nxfld	src/pane.h	/^  short nxfld;$/;"	m	struct:Field	typeref:typename:short
 obj/	Makefile	/^obj\/:$/;"	t
 obj/%.o	Makefile	/^obj\/%.o : %.c $(HEADERS) | obj\/$/;"	t
@@ -59,10 +54,12 @@ profile	Makefile	/^profile: CFLAGS += -g -pg$/;"	t
 rebuild	Makefile	/^rebuild: clean release$/;"	t
 release	Makefile	/^release: $(PROJECT)$/;"	t
 release	Makefile	/^release: CFLAGS += -O3$/;"	t
-status	src/pane.c	/^}status = {$/;"	v	typeref:struct:__anon7198f2f10108
-submit	src/pane.h	/^  void (*submit)(char*);$/;"	m	struct:Screen	typeref:typename:void (*)(char *)
+start	src/pane.c	/^int start(Screen *scr) {$/;"	f	typeref:typename:int
+status	src/pane.c	/^}status = {$/;"	v	typeref:struct:STATUS
+submit	src/pane.h	/^  struct Screen* (*submit)(struct Screen*);$/;"	m	struct:Screen	typeref:struct:Screen * (*)(struct Screen *)
 text	src/pane.h	/^  char* text;$/;"	m	struct:Field	typeref:typename:char *
 type	src/pane.h	/^  byte type : 4;$/;"	m	struct:Field	typeref:typename:byte:4
 type	src/pane.h	/^  char type:4;$/;"	m	struct:Mask	typeref:typename:char:4
+update	src/pane.h	/^	bool update;$/;"	m	struct:Screen	typeref:typename:bool
 x	src/pane.h	/^       , x  : 16$/;"	m	struct:Field	typeref:typename:size_t:16
 y	src/pane.h	/^  size_t y  : 16$/;"	m	struct:Field	typeref:typename:size_t:16
diff --git a/ispf/src/main.c b/ispf/src/main.c
index 0c0c929c6982ecc3b7b234e996459fef896996f0..5e23fa949d61a6033790b9588730e8aec9dbe2a7 100755
--- a/ispf/src/main.c
+++ b/ispf/src/main.c
@@ -1,7 +1,174 @@
+/**COPY***************************************************************/
+/*                                                                   */
+/*  COPYRIGHT (C) 2019 ZACK WONG                                     */
+/*  THIS PROGRAM IS FREE SOFTWARE: YOU CAN REDISTRIBUTE IT AND/OR    */
+/*  MODIFY IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS   */
+/*  BIN PUBLISHED BY THE FREE SOFTWARE FOUNDATION, EITHER VERSION 3  */
+/*  OF THE LICENSE, OR (AT YOUR OPTION) ANY LATER VERSION.           */
+/*                                                                   */
+/*  THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL,  */
+/*  BUT WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF   */
+/*  MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  SEE THE    */
+/*  GNU GENERAL PUBLIC LICENSE FOR MORE DETAILS.                     */
+/*                                                                   */
+/*  YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC        */
+/*  LICENSE ALONG WITH THIS PROGRAM. IF NOT, SEE                     */
+/*  <HTTPS://WWW.GNU.ORG/LICENSES/>.                                 */
+/*                                                                   */
+/*********************************************************************/
+/**BRIEF**************************************************************/
+/*                                                                   */
+/*           MEMBER : MAIN            TYPE: C11SCE                   */
+/*       PROGRAMMER : COFFEE          DATE: 28 JUL 2019              */
+/*          CONTACT : <COFFEE@UCC.GU.UWA.EDU.AU>                     */
+/*                                                                   */
+/*      DESCRIPTION : ISPF MAIN MENU AND ENTRY POINT.                */
+/*                                                                   */
+/*********************************************************************/
+/**OUTLINE************************************************************/
+/*                                                                   */
+/*********************************************************************/
+/**MAINTAINANCE HISTORY***********************************************/
+/*   DD MMM YYYY     NNNNNNNNN         <XXXXXXXXXXXXXXXXXXXXXXXXX>   */
+/*   XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX   */
+/*                                                                   */
+/*********************************************************************/
+
+
+/*********************************************************************/
+/*                            INCLUDES                               */
+/*********************************************************************/
 #include "../../icpl/src/pane.h"
+#include <stdbool.h>                     /* STDLIB BOOLEANS TYPE     */
+
+/*********************************************************************/
+/*                        PREPROCESSOR DEFS                          */
+/*********************************************************************/
+
+/*********************************************************************/
+/*                        CONSTANT LITERALS                          */
+/*********************************************************************/
+#define TXTOPT "Option ===>"
+#define TXTCMD "Command ===>"
+#define TXTHDR "ISPF Primary Option Menu"
+
+enum FLDNUM {
+	BTN0,
+	BTN1,
+	BTN2,
+	BTN3,
+	BTN4,
+	BTN5,
+	INP0,
+	OUT0
+} ;
+
+/*********************************************************************/
+/*                     FUNCTION DECLARATIONS                         */
+/*********************************************************************/
+Screen* MAIN_A100_SUBMIT (Screen*);
+void MAIN_B130_GET_NEXT_SCREEN ();
+void MAIN_B120_VALIDATE_MENU ();
+
+/*********************************************************************/
+/*                      LOCAL  DECLARATIONS                          */
+/*********************************************************************/
+Field MENUFLDS[] = { /* ISPF PRIMARY OPTION MENU */
+ /*FLDID   | TYPE |ROW|COL|LEN|  TEXT       | ATTR     | NXT */
+ /************************ MENU BAR **************************/
+	[BTN0] = { BTN  ,  0,  3,  0,"Menu"       , A_NORMAL ,     },
+  [BTN1] = { BTN  ,  0,  9,  0,"Utilities"  , A_NORMAL ,     },
+  [BTN2] = { BTN  ,  0, 20,  0,"Compilers"  , A_NORMAL ,     },
+  [BTN3] = { BTN  ,  0, 31,  0,"Options"    , A_NORMAL ,     },
+  [BTN4] = { BTN  ,  0, 40,  0,"Status"     , A_NORMAL ,     },
+  [BTN5] = { BTN  ,  0, 48,  0,"Help"       , A_NORMAL ,     },
+
+ /************************* INPUTS ***************************/
+  [INP0] = { INP  ,  3, 13, 66, ""          , INPT     ,  -1 },
+
+ /************************* LABELS ***************************/
+  [OUT0] = { LBL  ,  3,  1,  0, ""          , TEXT(2)  ,     },
+  /*AUTO*/ { LBL  ,  2, 28,  0,TXTHDR       , TEXT(4)  ,     },
+  /*AUTO*/ { LBL  ,  3,  1,  0,TXTOPT       , TEXT(2)  ,     },
+
+ /************************* RULERS ***************************/
+  /*AUTO*/ { RLR,  1,  1,   78, "q"         , TEXT(4)  ,     },
+  /*AUTO*/ {END}
+};
 
-int main() {
+/*********************************************************************/
+/*                       WK_STORAGE                                  */
+/*********************************************************************/
+bool WK_IS_VALID;
 
-  start();
+
+/*********************************************************************/
+/*    MAIN_A000_INIT                      							             */
+/*********************************************************************/
+#define MAIN_A000_INIT main
+int MAIN_A000_INIT() {
+	init();
+	Screen *mainmenu = buildScreen(MENUFLDS);
+	mainmenu->submit = MAIN_A100_SUBMIT;
+
+  start(mainmenu);
   return 0;
-}
\ No newline at end of file
+} /* MAIN_A000_INIT */
+
+
+/*********************************************************************/
+/*    MAIN_MAINMENU_UPD                                              */
+/*********************************************************************/
+
+
+
+/*********************************************************************/
+/*    MAIN_A100_SUBMIT                                               */
+/*********************************************************************/
+Screen* MAIN_A100_SUBMIT (Screen* self) {
+	int y, x;
+	getyx(stdscr, y, x);
+
+
+	if (self->cell[y][x].type == BTN){
+		/* MAIN_A110_ADD_SUBMENU();*/
+		return self;
+	}
+
+	MAIN_B120_VALIDATE_MENU();
+	if (WK_IS_VALID) {
+		MAIN_B130_GET_NEXT_SCREEN();
+	}
+	else {
+	}
+
+	return self;
+} /* MAIN_A100_SUBMIT */
+
+/*********************************************************************/
+/*    MAIN_B120_VALIDATE_MENU                                        */
+/*********************************************************************/
+void MAIN_B120_VALIDATE_MENU (){
+
+
+	return;
+
+} /* MAIN_B120_VALIDATE_MENU */
+
+
+/*********************************************************************/
+/*    MAIN_B130_GET_NEXT_SCREEN                                      */
+/*********************************************************************/
+void MAIN_B130_GET_NEXT_SCREEN (){
+
+
+	return;
+
+} /* MAIN_B130_GET_NEXT_SCREEN */
+
+
+
+
+
+
+