   /*     GOODBYE - Door for DayDream BBS v1.0-B3 by dAFt/Selleri     */

OPT OSVERSION=37
MODULE	'DayDream', 'DDDoor_Pragmas','exec/memory'

DEF dif, nappi, poro, guhi, muistia, bahi, xval, yval, oldxval, oldyval, rahi

PROC main()
  muistia:= AllocMem(144,MEMF_PUBLIC)
  xval:=1; yval:=1
  oldxval:=0; oldyval:=0

  IF ddbase:=OpenLibrary('dreamdoor.library',1)
	IF dif:=InitDoor(arg)
           InquirePointers(dif, muistia)

	   rahi:=0

	      MOVE.L muistia,A0
	      MOVE.L 52(A0),A0
loop:	      CMP.B  #121,(A0)
	      BEQ    poies
	      CMP.B  #89,(A0)
	      BEQ    poies
	      TST.B  (A0)+
	      BNE    loop
	      BRA    jeejee
poies:	      MOVE.L #1,rahi

jeejee:	      MOVE.L muistia,A0
	      MOVE.L 20(A0),A0
	      MOVE.W 10(A0),D0
	      BTST   #0,D0
	      BEQ    samu
	      MOVE.L #1,bahi            ->Bahi = 1 jos Ansi
	      BRA    skili
samu:	      MOVE.L #0,bahi
skili:
	  menu()
	ELSE
	  WriteF('This Program Requires Microsoft Windows V3.1!\n')
          CloseLibrary(ddbase)
	ENDIF
  ELSE
    WriteF('Could not open DreamDoor.library V1+!\n')
  ENDIF
  FreeMem(muistia,144)
ENDPROC


/**************************************************************************/
PROC showmenu()
	IF rahi=0
	  guhi:=0
	  DisplayFile(dif,'SLR-GBye',DDF_ADDEXTENSION)
	  SendString(dif,'[34m           [ [36mY [34m] [35m- [0mDisconnect           [34m[ [36mO [34m] [35m- [0mOperator Page\n[34m           [ [36mN [34m] [35m- [0mAbort                [34m[ [36mC [34m] [35m- [0mComment To SysOp\n[34m           [ [36mR [34m] [35m- [0mRelogin              [34m[   [34m] [35m- [32mSelect[36m')
	getpos()
      ELSE
	poro :=0;goaway()

      ENDIF
ENDPROC
/**************************************************************************/


/**************************************************************************/
PROC menu()
	  poro := 1; showmenu(); guhi := 0
	  WHILE poro=1
	  nappi:=GetKey(dif,0)
 	  SELECT nappi
	    CASE 155
              guhi :=2
	    CASE 27
	      guhi :=1
            CASE "["
              IF guhi=1 THEN guhi:=2
	    CASE 13
	      executecom()
	    CASE "y"
	      goaway()
	    CASE "Y"
	      goaway()
	    CASE "n"
	      abort()
	    CASE "N"
	      abort()
	    CASE "r"
	      Relogin(dif); poro:=0
	    CASE "R"
	      Relogin(dif); poro:=0
	    CASE "o"
	      page()
	    CASE "O"
	      page()
	    CASE "c"
	      comment()
	    CASE "C"
	      IF guhi=2
		xval:=xval+1
		getpos()
                ELSE 
	        guhi:=0
	        comment()
	      ENDIF
	    CASE "A"
	      IF guhi =2
	      yval:=yval-1
	      getpos()
              ELSE
              guhi :=0
	      ENDIF
	    CASE "B"
	      IF guhi =2 
	      yval:=yval+1
	      getpos()
	      ELSE
              guhi :=0
	      ENDIF
	    CASE "D"
	      IF guhi =2
		xval:=xval-1
		getpos()
                ELSE
		guhi :=0
	      ENDIF
	    DEFAULT
	      guhi :=0
          ENDSELECT
	  ENDWHILE
ENDPROC
/**************************************************************************/

PROC getpos()
	IF bahi=1
	SELECT xval
	CASE 0
	xval:=oldxval
	CASE 1
	  SELECT yval
	  CASE 0
	  yval:=oldyval
	  CASE 1
	  SendString(dif,'[31D[2A[36m[[44;36m Y [0;36m][26C[2B[36mY'); twit(); oldyval:=yval ;oldxval:=1
	  CASE 2
	  SendString(dif,'[31D[1A[36m[[44;36m N [0;36m][26C[1B[36mN'); twit();oldyval:=yval ;oldxval:=1
	  CASE 3
	  SendString(dif,'[31D[36m[[44;36m R [0;36m][26C[36mR'); twit();oldyval:=yval ;oldxval:=1
	  CASE 4
	  yval:=oldyval
	  ENDSELECT
	CASE 2
	  SELECT yval
	  CASE 0
	  yval:=oldyval
	  CASE 1
	  SendString(dif,'[2D[2A[36m[[44;36m O [0;36m][3D[2B[36mO'); twit(); oldyval:=yval ;oldxval:=2
	  CASE 2
	  SendString(dif,'[2D[1A[36m[[44;36m C [0;36m][3D[1B[36mC'); twit();oldyval:=yval ;oldxval:=2
	  CASE 3
	  yval:=oldyval
	  xval:=oldxval
	  ENDSELECT
	CASE 3
	  yval:=oldyval
	  xval:=oldxval
        ENDSELECT
      ENDIF

ENDPROC

PROC twit()
	IF oldxval=1
	  SELECT oldyval
	  CASE 1
	  SendString(dif,'[31D[2A[0;34m[[36m Y [34m][26C[2B[36m')
	  CASE 2
	  SendString(dif,'[31D[1A[0;34m[[36m N [34m][26C[1B[36m')
	  CASE 3
	  SendString(dif,'[31D[34m[[36m R [34m][26C[36m')
	  ENDSELECT
	  ENDIF

	IF oldxval=2
	  SELECT oldyval
	  CASE 1
	  SendString(dif,'[2D[2A[0;34m[[36m O [34m][3D[2B[36m')
	  CASE 2
	  SendString(dif,'[2D[1A[0;34m[[36m C [34m][3D[1B[36m')
	  ENDSELECT
	  ENDIF

ENDPROC

PROC executecom()
	SELECT xval
	CASE 1
	  SELECT yval
	  CASE 1
	    goaway()
	  CASE 2
	    abort()
	  CASE 3
            Relogin(dif); poro:=0
	  ENDSELECT
	CASE 2
	  SELECT yval
	  CASE 1
	    page()
	  CASE 2
	    comment()
	  ENDSELECT
        ENDSELECT
ENDPROC

PROC goaway()
	      SendString(dif,'[0mCatCat V1.0 by Daft/Selleri^Hydra/Supreme - vitun loistavaa!'); DisplayFile(dif,'Goodbye',DDF_ADDEXTENSION); Disconnect(dif); CloseDoor(dif); poro:=0
ENDPROC


PROC abort()
	      SendString(dif,'n\n\n[36mWell then.. Back to the system..\n\n'); CloseDoor(dif); poro:=0
ENDPROC


PROC page()
	      SendString(dif,'o'); DdCommand(dif,'o'); oldxval:=0; oldyval:=0; showmenu()
ENDPROC


PROC comment()
	      SendString(dif,'c'); DdCommand(dif,'e sysop'); oldxval:=0; oldyval:=0; showmenu()
ENDPROC


