
WBStartup
;---------------------This Code requires the AmigaLibsII.res ------------------


Let version$="$VER: ASCII-Clip v1.03 ? 5.April 1999 by FreeJack [FreeJack@FreeJack.de] (05.04.99)"
Let Boot$=ProgDir$

Let lf.s=Chr$(10)
Let lfn.s=Chr$(10)+Chr$(0)


;------------------------------- Catalog Part Start -----------------------------


Dim Daten$(4), Cat$(65535)

Let *Cat=OpenCatalogA_(0,"ASCII-Clip.catalog",0)
If *Cat
   For i=1 To 4
   Let Daten$(i)=PeekTo$(GetCatalogStr_(*Cat,i,0),0)
   Next i
   CloseCatalog_(*Cat)
Else
   Restore Datas
   For i=1 To 4
      Read Daten$(i)
   Next i
EndIf


.Datas
Data.s "made by FreeJack [FreeJack@FreeJack.de]"
Data.s "Copies a single ASCII Code To Clipboard"
Data.s "Then you can paste the ASCII-Code in any Program"
Data.s "copied ..."

;------------------------------- Catalog Part End ------------------------------


;------------------------------ Function Part Start ----------------------------

.Echo
Statement Echo{Text$}
   Let NText$=Text$+Chr$(10)+Chr$(0)
   Let void=PutStr_(&NText$)
End Statement

.MakeVers
Function.s MakeVers{a$}
   b$=UnRight$(a$,6)
   Function Return b$
End Function

vers$=MakeVers{version$}
Echo{vers$}

;------------------------------- Function Part End -----------------------------


If NumPars=0
      ;Echo {vers$}
Else
   Echo {Daten$(1)}
   Echo {Daten$(2)}
   Echo {Daten$(3)}
   End
EndIf


;-------------------------------- CLI Parsing End ------------------------------
;----------------------------- Clipboard Init Start ----------------------------



NEWTYPE.OwnIOStdReq
  io_Message.Message
  *io_Device.b           ;Device
;  *io_Unit.ClipboardUnitPartial
  *io_Unit.b
  io_Command.w
  io_Flags.b
  io_Error.b
  io_Actual.l
  io_Length.l
  *io_Data.b
  io_Offset.l
;add particulars to device here
  io_ClipID.l
End NEWTYPE



  #_INVALID=0:#_RESET=1:#_READ=2:#_WRITE=3:#_UPDATE=4
  #_CLEAR=5:#_STOP=6:#_START=7:#_FLUSH=8:#_NONSTD= 9



DEFTYPE .OwnIOStdReq clipio
DEFTYPE .MsgPort clipport
clipsig.l=0

.ClipOpen
Statement ClipOpen{}
  SHARED clipio,clipport,clipsig

  clipport\mp_Node\ln_Type=4
  clipport\mp_MsgList\lh_Head=&clipport\mp_MsgList\lh_Tail
  clipport\mp_MsgList\lh_TailPred=&clipport\mp_MsgList\lh_Head

  clipio\io_Message\mn_Node\ln_Type=5
  clipio\io_Message\mn_ReplyPort=&clipport
  clipio\io_Message\mn_Length=SizeOf.IOStdReq

  d.s="clipboard.device"

  If OpenDevice_(d,0,clipio,0)<>0 Then End

  clipsig.l=AllocSignal_(-1):If clipsig<0 Then End
  clipport\mp_SigBit=clipsig
  clipport\mp_SigTask=FindTask_(0)
End Statement

.ClipClose
Statement ClipClose{}
  SHARED clipio,clipsig

  CloseDevice_ clipio
  FreeSignal_ clipsig
End Statement

.ClipWrite
Statement ClipWrite{s.s}
  SHARED clipio

  ClipOpen{}
  sodd.s=s
  If Len(s) MOD 2 Then sodd+Chr$(0)
  a.s="FORM"+Mkl$(12+Len(sodd))+"FTXTCHRS"+Mkl$(Len(s))+sodd
  USEPATH clipio
  \io_Command=#_WRITE
  \io_Data=&a
  \io_Length=Len(a)
  \io_ClipID=0
  \io_Offset=0
  \io_Error=0
  SendIO_ clipio

  \io_Command=#_UPDATE
  SendIO_ clipio
  ClipClose{}
End Statement



;------------------------------ Clipboard Init End ------------------------------






font.l=AllocMem(200,$10002)
Poke.w font+4,8
Poke.l font  ,font+10
fontn$="topaz.font"
Poke$ font+10,fontn$


; Set up required IDCMP flags to respond to
#IDCMP = #IDCMP_NEWSIZE | #IDCMP_RAWKEY | #IDCMP_MOUSEBUTTONS | #IDCMP_MOUSEMOVE
#IDCMP =#IDCMP| #IDCMP_CLOSEWINDOW | #IDCMP_VANILLAKEY

WbToScreen 0
WBenchToFront_
*_screen._Screen = Peek.l(Addr Screen(0))
DEFTYPE._Window *win
DEFTYPE.l windowsig, signal
DEFTYPE.IntuiMessage *msg
DEFTYPE.IntuiText it
quit.w = 0
leer$  = "Clip me"
TLeft.l=*_screen\Width-140


;--------- Define tags for Window
Dim wtags.TagItem(15)
Dim ztags.w(5)

ztags(0)=0
ztags(1)=11
ztags(2)=200
ztags(3)=11
ztags(4)=0

wtags(0)\ti_Tag=#WA_PubScreen,*_screen
wtags(1)\ti_Tag=#WA_IDCMP,#IDCMP
wtags(2)\ti_Tag=#WA_Flags,$1160e
wtags(3)\ti_Tag=#WA_ScreenTitle,&vers$
wtags(4)\ti_Tag=#WA_MinWidth,100
wtags(5)\ti_Tag=#WA_MinHeight,11
wtags(6)\ti_Tag=#WA_MaxWidth,*_screen\Width
wtags(7)\ti_Tag=#WA_MaxHeight,*_screen\Height
wtags(8)\ti_Tag=#WA_Left,TLeft
wtags(9)\ti_Tag=#WA_Top,11
wtags(10)\ti_Tag=#WA_Width,140
wtags(11)\ti_Tag=#WA_Height,150
wtags(12)\ti_Tag=#WA_Zoom,&ztags(0)
wtags(13)\ti_Tag=#WA_Title,&leer$
wtags(14)\ti_Tag=#TAG_END,#TAG_DONE

; Try to open window
*win = OpenWindowTagList_(0, &wtags(0))
If *win
   windowsig.l = 1 LSL *win\UserPort\mp_SigBit
   d.l = windowsig|#SIGBREAKF_CTRL_C
   rp.l=*win\RPort

   Gosub DrawData

   While quit = 0
      signal.l = Wait_(d)
      If (signal & windowsig)
         *msg = GT_GetIMsg_(*win\UserPort)
         While (*msg)
            ev.l = *msg\Class
;            Echo{"Class: "+Hex$(ev)}
            Select ev
               Case #IDCMP_CLOSEWINDOW
                  quit = 1
               Case 2
                  Gosub DrawData
               Case $8
                  Code.l = *msg\Code
                  If Code=104 Then Gosub Clip

               Case $10
                  Code.l = *msg\Code
                  Gosub Emit
               Case $200000
                  Code.l = *msg\Code
             ;     Echo{"Code : "+Str$(Code)}
                  Select Code
                     Case 27
                        quit = 1
                  End Select
            End Select
         GT_ReplyIMsg_(*msg)
         *msg = GT_GetIMsg_(*win\UserPort)
         Wend
      End If
      If (signal & #SIGBREAKF_CTRL_C)
         ;---------- Ctrl-C needs to be pressed in CLI window !!!!!! -----------
         quit = 1
      End If
   Wend
   CloseWindow_(*win)
End If

End



.DrawData
   offset.b=6
   ofont.l=OpenFont_(font)
   SetFont_ rp,ofont
   SetAPen_ rp,1
   SetBPen_ rp,0
   For i=0 To 15
      For j=0 To 15
         Move_    rp,j*8,i*8+offset
         k=i*16+j
         Text$=Chr$(k)
         Text_    rp,&Text$,1
      Next j
   Next i
   CloseFont_ ofont
Return


.Emit
   ofont.l=OpenFont_(font)
   SetFont_ rp,ofont
   SetAPen_ rp,1
   SetBPen_ rp,2
   Mx.l=*win\GZZMouseX/8
      If Mx> 15 Then Mx=15
      If Mx<  0 Then Mx= 0
   My.l=*win\GZZMouseY/8
      If My> 15 Then My=15
      If My<  0 Then My= 0
   Zahl.l=My*16+Mx
   Wert$=Left$(Str$(Zahl)+")  ",4)
   Let Text$=Chr$(Zahl)+"= ASCII ("+Wert$
   Move_    rp,8,135
   Text_    rp,&Text$,14
   CloseFont_ ofont
Return

.Clip
   ClipWrite {Chr$(Zahl)}
   ofont.l=OpenFont_(font)
   SetFont_ rp,ofont
   SetAPen_ rp,1
   SetBPen_ rp,2
   Let Text$=Chr$(Zahl)+" = "+Daten$(4)
   Move_    rp,8,135
   Text_    rp,&Text$,14
   CloseFont_ ofont

Return


