******************************************
*					 *
* Xoper 1.2 Copyright (C) Werner Gunther *
*					 *
******************************************
*    Written for the A68K Assembler	 *
*   (Fish 110) by Charlie Gibbs and      *
*	   Brian R. Anderson		 *
*					 *
*  Do not use Smallcode/Smalldata when	 *
*	      linking			 *
******************************************

;DEBUG SET 1
	    XREF    _LVOSwitch
	    XDEF    _SysBase
sysbase     equ     4

CALL	    MACRO
	    xref    _LVO\1
	    move.l  \2,a6
	    jsr     _LVO\1(a6)
	    ENDM
LIBCALL     MACRO
	    xref    _\1
	    jsr     _\1
	    ENDM

ADDCMD	    MACRO
cmdnum	    set     cmdnum+1
	    dc.b    \1,0
	    ENDM

;Program startup. If called from DOS we
;use segment splitting to detach
;from our DOS-task.
;A0 points to parameter area,
;D0 holds its length.
start	    move.l  a0,parmtxt
	    move.b  d0,d5
	    lea     dosname(PC),a1
	    move.l  sysbase,a0
	    lea     378(a0),a0
	    move.l  a0,-(a7)
	    CALL    FindName,sysbase
	    move.l  d0,dosbase
	    move.l  0(a7),a0
	    lea     gfxname(PC),a1
	    CALL    FindName,sysbase
	    move.l  d0,gfxbase
	    move.l  (a7)+,a0
	    lea     intuiname(PC),a1
	    CALL    FindName,sysbase
	    move.l  d0,intuibase
	    move.l  d0,a0
	    move.l  $38(a0),a0
	    move.w  12(a0),d0
	    sub.w   #550,d0
	    move.w  d0,window_l

	    move.l  sysbase,a4
	    move.l  276(a4),a4
	    tst.l   $ac(a4)
	    bne.s   notwb
	    lea     $5c(a4),a0
	    CALL    WaitPort,sysbase
	    lea     $5c(a4),a0
	    CALL    GetMsg,sysbase
	    move.l  d0,wbmsg
	    move.w  #$740a,in
notwb:
       IFND  DEBUG
	    lea     newname,a1
	    CALL    FindTask,sysbase
	    tst.l   d0
	    bne     oops
       ENDC
	    tst.l   wbmsg
	    beq.s   fromdos
	    jmp     mainprg

fromdos     lea     in,a3
	    clr.l   d7
	    move.b  d5,d7
	    move.l  parmtxt,a4
trans	    move.b  (a4)+,(a3)+
	    dbf     d7,trans

	    cmpi.b  #1,d5
	    bne.s   starttask
	    move.w  #$740a,in
starttask:

	IFND DEBUG
	    lea     start(PC),a1
	    suba.l  #4,a1
	    move.l  0(a1),d3
	    move.l  d3,myseg
	    clr.l   0(a1)
	    CALL    Forbid,sysbase
	    move.l  #newname,d1
	    clr.l   d2
	    move.l  #3500,d4
	    CALL    CreateProc,dosbase
	    clr.l   d1
	    CALL    Exit,dosbase
oops	    suba.l  a0,a0
	    CALL    DisplayBeep,intuibase
	    CALL    Forbid,sysbase
	    move.l  wbmsg,d0
	    beq.s   leave
	    move.l  d0,a1
	    CALL    ReplyMsg,sysbase
	    clr.l   d0
leave	    rts

dosname     dc.b    'dos.library',0
intuiname   dc.b    'intuition.library',0
gfxname     dc.b    'graphics.library',0
	    EVEN

main	    CODE    xoper
	ENDC
mainprg     move.l  sysbase,a0
	    move.l  a0,_SysBase
	    move.l  276(a0),a0
	    move.l  a0,mytask
	    move.l  #newname,10(a0)
	    pea     0
	    pea     0
	    LIBCALL CreatePort
	    lea     8(a7),a7
	    move.l  d0,replyport
;install a counter to determine the amount of CPU-time each
;Task uses.
	    move.l  _SysBase(PC),a1
	    move.l  #_LVOSwitch,a0
	    move.l  2(a1,a0),oldswitch
	    move.l  #myswitch,d0
	    CALL    SetFunction,_SysBase(PC)

	    cmp.w   #'-b',in
	    bne.s   restart
	    move.w  #$740a,in
	    bra     instback

;This code just opens a CON: Window. Position
;and size are taken from window_l,window_t,
;window_w,window_h.

restart     move.l  mytask(PC),a0
	    clr.l   26(a0)
	    lea     fname,a0
	    move.l  #'con:',0(a0)
	    clr.b   4(a0)
	    lea     binarea(PC),a1
	    lea     window_l(PC),a2
	    move.l  #3,d4
rest1	    move.l  #2,d3
	    clr.l   d0
	    move.w  (a2)+,d0
	    bsr     longdec
	    bsr     strcat
	    move.w  #$2f00,binarea
	    bsr     strcat
	    dbf     d4,rest1
	    lea     windowname(PC),a1
	    bsr     strcat
	    move.l  a0,d1
	    move.l  #1005,d2
	    CALL    Open,dosbase(PC)
	    move.l  d0,fileptr
	    lsl.l   #2,d0
	    move.l  d0,a4
	    move.l  8(a4),conmsg
;get a pointer to our window
	    move.l  #buffer,d0
	    lsr.l   #2,d0
	    move.l  d0,dp_Arg1
	    move.l  conmsg,a0
	    move.l  #25,dp_Type
	    bsr     cons1
	    lea     buffer,a0
	    move.l  28(a0),window

	    clr.l   ptr

;show a list. The string entered from keyboard is stored
;in 'in'.Every character is interpreted as one command
;i.e. 'rip' means 'resources'+'interrupts'+'ports'.
showwhat    bsr     raw
	    bsr     clearscr
	    tst.b   morefl
	    beq.s   swh1
;if <MORE> is enabled we need to know how many lines can
;fit into our window
	    move.l  #getwin,d2
	    move.l  fileptr,d1
	    moveq.l #4,d3
	    CALL    Write,dosbase(PC)
	    move.l  fileptr,d1
	    move.l  #9,d3
	    move.l  #buffer,d2
	    CALL    Read,dosbase(PC)
	    lea     buffer,a0
	    lea     5(a0),a0
	    bsr     isdec
	    subq.b  #1,d2
	    move.b  d2,rows
	    clr.b   row
;search the command to be executed. If none is found,
;show a help message
swh1	    clr.l   d7
input	    lea     in,a0
	    move.b  0(a0,d7),d0
	    addq.b  #1,d7
	    cmpi.b  #' ',d0
	    beq.s   input
	    cmpi.b  #10,d0
	    beq     nomore
	    or.b    #32,d0
	    cmpi.b  #'q',d0
	    beq     exit
	    lea     params(PC),a0
	    clr.l   d1
i1	    cmp.b   0(a0,d1),d0
	    beq.s   foundp
	    addq.b  #1,d1
	    cmpi.b  #parmnum,d1
	    bne.s   i1

	    move.l  #usetxt,d0
	    move.b  #1,mnflag
	    bsr     putnam
	    clr.b   mnflag
	    bra     nomore

foundp	    lsl.b   #2,d1
	    lea     subs(PC),a0
	    move.b  #1,mnflag
	    jsr     0(a0,d1)
	    clr.b   mnflag
	    bra.s   input

;wait 'timeout' seconds for a kepress

nomore	    move.l  #prompt,d2
	    move.l  fileptr,d1
	    moveq.l #7,d3
	    CALL    Write,dosbase(PC)
	    bsr     con
	    move.b  timeout,d6
halt	    move.l  #1000000,d4
	    bsr     getkey
	    move.l  mytask(PC),a0
	    move.l  26(a0),d1
	    and.l   #$1000,d1
	    bne     exit
	    tst.l   d0
	    bne.s   cli
	    subq.b  #1,d6
	    bne.s   halt
	    clr.l   d4
	    bsr     getkey
	    tst.l   d0
	    bne.s   cli
	    bra     showwhat

getkey	    move.l  fileptr,d1
	    moveq.l #1,d3
	    move.l  #null,d2
	    CALL    Write,dosbase(PC)
	    move.l  d4,d2
	    move.l  fileptr,d1
	    CALL    WaitForChar,dosbase(PC)
	    rts
;read the string from keyboard search and execute
;the command, if any.
cli	    bsr     readline
	    lea     dummy,a0
	    subq.b  #1,d0
cl2	    subq.b  #1,d0
	    bmi.s   cl1
	    cmp.b   #' ',0(a0,d0)
	    beq.s   cl2
cl1	    addq.b  #1,d0
	    move.b  #10,0(a0,d0)
	    bsr     kllblnks
	    cmpi.b  #10,0(a0)
	    beq     showwhat
	    lea     in,a1
	    lea     commds(PC),a2
	    clr.b   d2
tstcmd	    move    #-1,d1
tc2	    addq    #1,d1
	    move.b  0(a0,d1),d3
	    or.b    #32,d3
	    tst.b   0(a2,d1)
	    beq.s   foundcmd
	    cmp.b   0(a2,d1),d3
	    beq.s   tc2
nocmd	    tst.b   (a2)+
	    bne.s   nocmd
	    addq.b  #1,d2
	    cmpi.b  #cmdnum,d2
	    bne     tstcmd
	    bra.s   nm1
foundcmd    cmpi.b  #'*',d3
	    beq.s   okcmd
	    cmpi.b  #' ',d3
	    bne.s   nocmd
okcmd	    clr.b   procnum
	    adda.w  d1,a0
	    bsr     kllblnks
	    and.l   #$ff,d2
	    lsl     #2,d2
	    lea     cmdaddr(PC),a1
	    clr.b   printed
	    jsr     0(a1,d2)
	    tst.b   morefl
	    beq     nomore
	    tst.b   printed
	    beq     nomore
	    move.l  #10,d3
	    move.l  fileptr,d1
	    move.l  #waittxt,d2
	    CALL    Write,dosbase(PC)
	    bsr     readline
	    move.l  #4,d3
	    move.l  fileptr,d1
	    move.l  #thisline,d2
	    CALL    Write,dosbase(PC)
	    bra     nomore

nm1	    lea     buffer,a2
nm2	    move.b  (a1)+,(a2)+
	    cmp.b   #10,-1(a1)
	    bne.s   nm2
	    lea     in,a1
nm0	    move.b  (a0)+,(a1)+
	    dbf     d0,nm0
	    lea     dummy,a2
	    lea     buffer,a1
nm3	    move.b  (a1)+,(a2)+
	    cmp.b   #10,-1(a1)
	    bne.s   nm3
	    bra     showwhat

subs	    bra     showtask
	    bra     showaddr
	    bra     showdevs
	    bra     showlibs
	    bra     showres
	    bra     showresi
	    bra     showmem
	    bra     showprt
	    bra     showint
cmdaddr     bra     settime
	    bra     taskpri
	    bra     info
	    bra     pri
	    bra     flush
	    bra     freeze
	    bra     warm
	    bra     signal
	    bra     break
	    bra     alert
	    bra     lastalert
	    bra     hold
	    bra     stopall
	    bra     clear
	    bra     cancel
	    bra     moretst
	    bra     taskports
	    bra     hunks
	    bra     devices
	    bra     openlib
	    bra     closelib
	    bra     currentdir
	    bra     cd
	    bra     mypri
	    bra     openfiles
	    bra     locks
	    bra     unlock
	    bra     screens
	    bra     windows
	    bra     closescreen
	    bra     closewindow
	    bra     fonts
	    bra     windowfonts
	    bra     lockdrive
	    bra     freedrive
	    bra     capture
	    bra     clrcold
	    bra     clrcool
	    bra     clrwarm
	    bra     snoop
	    bra     usage

;------ Task-Structures-----

showaddr    clr.b   tasktyp
	    bra.s   startask
showtask    move.b  #1,tasktyp
startask    move.l  #infoh1,d0
	    bsr     putstr
	    move.l  _SysBase(PC),a6
	    move.l  #cpu2,d0
	    btst    #1,297(a6)
	    bne.s   cpupr
	    move.l  #cpu1,d0
	    btst    #0,297(a6)
	    bne.s   cpupr
	    move.l  #cpu0,d0
cpupr	    bsr     putstr
	    move.l  _SysBase(PC),a6
	    btst    #2,297(a6)
	    beq.s   no881
	    move.l  #cpu3,d0
	    bsr     putstr
no881	    move.l  #20,d1
	    bsr     tab
	    move.l  #infoh3,d0
	    bsr     putstr
	    move.l  _SysBase(PC),a6
	    move.w  #$4000,$dff09a
	    move.l  280(a6),d0
	    move.l  284(a6),d1
	    move.l  oldidl,d3
	    move.l  d0,oldidl
	    sub.l   d3,d0
	    move.l  olddisp,d3
	    move.l  d1,olddisp
	    sub.l   d1,d3
	    move.l  d0,d1
	    sub.l   d3,d1
	    move.l  d1,maxdisp
	    move.l  d3,-(a7)
	    movem.l d0-d3,-(a7)
	    bsr     getaskdat
	    move.l  a5,savedat
	    movem.l (a7)+,d0-d3
	    sub.l   d3,d0
	    neg.l   d3
	    bsr     prcent
	    bsr     newline
	    move.l  #infoh2,d0
	    bsr     putstr
	    move.l  (a7)+,d0
	    neg.l   d0
	    move.l  d0,dispatches
	    clr.l   d3
	    bsr     longdec
	    move.l  #27,d1
	    bsr     tab
	    move.l  #infoh6,d0
	    bsr     putstr
	    move.l  olddisp(PC),d0
	    bsr     longdec

	    bsr     newline
	    bsr     newline
	    lea     theader(PC),a0
	    tst.b   tasktyp
	    bne.s   phedder
	    lea     t2header(PC),a0
phedder     bsr     puthead
	    move.l  savedat(PC),a5

pt1	    tst.b   entries
	    beq     pt2
	    lea     -16(a5),a5
	    move.l  0(a5),a4
	    move.l  a4,d0
	    bsr     hexa
	    tst.b   tasktyp
	    beq.s   pt12
	    clr.l   d0
	    move.b  8(a4),d0
	    bsr     gettype

pt12	    clr.l   d0
	    move.b  9(a5),d0
	    subq.b  #1,d0
	    mulu    #10,d0
	    move.l  #status,d1
	    add.l   d1,d0
	    bsr     putstr
	    tst.b   tasktyp
	    bne.s   pt13

	    move.l  18(a4),d0
	    bsr     hex8
	    move.l  #ganzlongnix,d0
	    cmp.b   #4,9(a5)
	    beq.s   pt14
	    bsr     putstr
	    bra.s   pt15
pt14	    move.l  22(a4),d0
	    bsr     hex8
pt15	    move.l  26(a4),d0
	    bsr     hex8
	    move.l  54(a4),a1
	    move.l  0(a1),d0
	    cmp.b   #2,9(a5)
	    bne.s   pt16
	    move.l  #*,d0
pt16	    bsr     hexa
	    bra     pt4

pt13	    move.b  10(a5),d3
	    bsr     plusmins

	    move.l  dispatches(PC),d0
	    tst.b   usageflag
	    beq.s   pt37
	    move.l  maxdisp(PC),d0
pt37	    move.l  12(a5),d3
	    bsr     prcent

	    clr.b   d3
	    cmpi.b  #13,8(a5)
	    bne.s   noproc
	    tst.l   172(a4)
	    beq.s   noproc
	    move.l  140(a4),d3
	    bsr     bytedec
	    bra.s   pt4
noproc	    move.l  #nix,d0
	    bsr     putstr
pt4	    move.l  4(a5),d0
	    bsr     putnam
	    subq.b  #1,entries
	    bra     pt1
pt2	    rts

putlist     move.l  0(a4),a4
	    tst.l   0(a4)
	    beq.s   endlist
	    bsr     putdata
	    bra.s   putlist
endlist     rts

putdata     move.l  a4,0(a5)
	    move.l  10(a4),4(a5)
	    move.b  8(a4),8(a5)
	    move.b  15(a4),9(a5)
	    move.b  9(a4),10(a5)
	    move.b  143(a4),11(a5)
	    clr.l   12(a5)
	    lea     cputime,a0
	    move.l  tasksnum(PC),d1
	    beq.s   pua1
pua3	    cmp.l   0(a0),a4
	    beq.s   pua2
	    lea     8(a0),a0
	    dbf     d1,pua3
	    bra.s   pua1
pua2	    move.l  4(a0),12(a5)
pua1	    lea     16(a5),a5
	    addq.b  #1,entries
	    rts

gettype     and.l   #$f,d0
	    mulu    #11,d0
	    add.l   #type,d0
	    bra     putstr

getaskdat   lea     buffer,a5
	    clr.b   entries
	    lea     stplist(PC),a4
	    bsr     putlist
	    move.l  _SysBase(PC),a4
	    lea     420(a4),a4
	    bsr     putlist
	    move.l  _SysBase(PC),a4
	    lea     406(a4),a4
	    bsr     putlist
	    move.l  _SysBase(PC),a4
	    move.l  276(a4),a4
	    bsr     putdata
	    clr.l   tasksnum
	    move.w  #-$4000,$dff09a
	    rts

prcent	    lsl.l   #1,d3
	    move.l  d3,d1
	    lsl.l   #2,d3
	    add.l   d1,d3
	    lsl.l   #2,d3
	    move.l  d3,d1
	    lsl.l   #3,d3
	    move.l  d3,d2
	    lsl.l   #1,d3
	    add.l   d2,d3
	    add.l   d1,d3
	    move.l  d0,d1
	    move.l  d3,d0
	    bsr     div
	    divu    #10,d0
	    move    d0,d3
	    swap    d0
	    move    d0,d1
	    bsr     bytedec
	    lea     out,a0
	    move.b  #'.',-1(a0,d0)
	    or.b    #'0',d1
	    move    d1,d0
	    bsr     putchar
	    move.l  #infoh4,d0
	    bra     putstr
*-------- mem-hunks ------------

showmem     lea     mheader(PC),a0
	    bsr     puthead
	    move.l  _SysBase(PC),a5
	    lea     322(a5),a5
	    clr.l   d5
mem1	    move.l  0(a5),a5
	    tst.l   0(a5)
	    beq.s   mem2
	    move.l  20(a5),d0
	    bsr     hexa
	    move.l  24(a5),d0
	    bsr     hexa
	    move.l  28(a5),d0
	    add.l   d0,d5
	    moveq   #1,d3
	    bsr     longdec
	    move.b  15(a5),d3
	    bsr     bytedec
	    move.b  9(a5),d3
	    bsr     plusmins
	    move.l  10(a5),d0
	    bsr     putnam
	    bra.s   mem1
mem2	    move.l  #infoh6,d0
	    bsr     putstr
	    move.l  #15,d1
	    bsr     tab
	    move.l  d5,d0
	    bsr     longdec
newline     move.l  #nxtline,d0
	    bra     putstr

*--------- interrupts ------------
showint     lea     iheader(PC),a0
	    bsr     puthead
	    lea     intnames(PC),a5
	    lea     inttyp(PC),a4
	    move.l  #15,d5
	    move.l  _SysBase(PC),a3
	    lea     84(a3),a3

si0	    tst.b   0(a4)
	    bne.s   si4
	    move.l  8(a3),a2
	    bra.s   si5
si4	    move.l  0(a3),a2
si5	    cmp.l   #0,a2
	    beq.s   nxtint
	    tst.b   0(a4)
	    beq.s   si1
si2	    move.l  0(a2),a2
	    tst.l   0(a2)
	    beq.s   nxtint
si1	    move.l  a2,d0
	    bsr     hexa
	    move.l  14(a2),d0
	    bsr     hexa
	    move.l  18(a2),d0
	    bsr     hexa
	    move.b  9(a2),d0
	    move.l  a3,-(a7)
	    bsr     plusmins
	    move.l  (a7)+,a3
	    move.l  a5,d0
	    bsr     putstr
	    move.l  10(a2),d0
	    tst.l   d0
	    bne.s   prtintnam
	    move.l  #ganzlongnix,d0
prtintnam   bsr     putnam
	    tst.b   0(a4)
	    bne.s   si2
	    tst.l   0(a2)
	    beq.s   nxtint
	    move.l  0(a4),a4
	    bra     si1
nxtint	    lea     1(a4),a4
	    lea     12(a5),a5
	    lea     12(a3),a3
	    dbf     d5,si0
	    rts

*---------    resident ------------

showresi    lea     rheader(PC),a0
	    bsr     puthead
	    move.l  _SysBase(PC),a5
	    move.l  300(a5),a5
r1	    tst.l   0(a5)
	    beq     r2
	    move.l  0(a5),a4
	    move.l  a4,d0
	    bsr     hexa
	    move.b  13(a4),d3
	    bsr     plusmins
	    move.b  10(a4),d0
	    bsr     bin
	    move.b  11(a4),d3
	    bsr     bytedec
	    move.b  12(a4),d0
	    bsr     gettype
	    move.l  14(a4),d0
	    bsr     putnam
	    lea     4(a5),a5
	    bra     r1
r2	    rts

*---------  ports  -------------

showprt     lea     pheader(PC),a0
	    bsr     puthead
	    move.l  _SysBase(PC),a4
	    add.l   #392,a4
	    lea     buffer,a5
	    clr.l   d5
	    CALL    Forbid,_SysBase(PC)
sp2	    move.l  0(a4),a4
	    tst.l   0(a4)
	    beq.s   sp20
	    bsr     getpdata
	    bra.s   sp2
sp20	    tst.b   tports
	    beq.s   sp15
sp1	    move.w  #$4000,$dff09a
	    move.l  _SysBase(PC),a4
	    move.l  276(a4),a4
	    lea     92(a4),a4
	    bsr     getpdata
	    move.l  _SysBase(PC),a2
	    lea     406(a2),a2
sp11	    move.l  0(a2),a2
	    tst.l   0(a2)
	    beq.s   sp14
	    lea     92(a2),a4
	    cmp.b   #13,8(a2)
	    bne.s   sp11
	    bsr     getpdata
	    bra     sp11
sp14	    move.l  _SysBase(PC),a2
	    lea     420(a2),a2
sp12	    move.l  0(a2),a2
	    tst.l   0(a2)
	    beq.s   sp13
	    lea     92(a2),a4
	    cmp.b   #13,8(a2)
	    bne.s   sp12
	    bsr     getpdata
	    bra     sp12
sp13	    move.w  #-$4000,$dff09a
sp15	    CALL    Permit,_SysBase(PC)
	    lea     buffer,a5
sp3	    tst.b   d5
	    beq     sp6
	    move.l  0(a5),d0
	    bsr     hexa
	    move.l  4(a5),d0
	    bsr     putstr
	    move.l  #23,d1
	    bsr     tab
	    move.b  8(a5),d0
	    and.l   #3,d0
	    mulu    #9,d0
	    add.l   #mp_flags,d0
	    bsr     putstr
	    move.b  9(a5),d3
	    bsr     bytedec
	    move.b  14(a5),d3
	    bsr     bytedec
	    move.l  #ganzlongnix,d0
	    move.l  10(a5),a3
	    cmp.l   #0,a3
	    beq.s   sp8
	    move.l  10(a3),d1
	    move.l  d1,d2
	    andi.l  #$ff000000,d2
	    bne.s   sp8
	    move.l  d1,d0
sp8	    bsr     putnam
	    lea     16(a5),a5
	    subq.b  #1,d5
	    bra     sp3
sp6	    rts

getpdata    move.l  a4,0(a5)
	    move.l  10(a4),4(a5)
	    move.b  14(a4),8(a5)
	    move.b  15(a4),9(a5)
	    move.l  16(a4),10(a5)
	    clr.b   d0
	    movea.l 20(a4),a3
sp10	    movea.l 0(a3),a3
	    cmpa.l  #0,a3
	    beq.s   sp9
	    addq.b  #1,d0
	    cmp.b   #255,d0
	    bne.s   sp10
sp9	    move.b  d0,14(a5)
	    lea     16(a5),a5
	    addq.b  #1,d5
	    rts
*-------- resources ------------

showres     lea     lheader(PC),a0
	    bsr     puthead1
	    lea     resnam(PC),a0
	    bsr     puthead2
	    move.l  _SysBase(PC),d5
	    add.l   #336,d5
	    bsr     show
	    rts

*--------- devices  -------------

showdevs    lea     lheader(PC),a0
	    bsr     puthead1
	    lea     devnam(PC),a0
	    bsr     puthead2
	    move.l  _SysBase(PC),d5
	    add.l   #350,d5
	    bsr     show
	    rts

*-------- libraries -------------

showlibs    lea     lheader(PC),a0
	    bsr     puthead1
	    lea     libnam(PC),a0
	    bsr     puthead2
	    move.l  _SysBase(PC),d5
	    add.l   #378,d5

show	    lea     buffer,a5
	    clr.b   entries
	    CALL    Forbid,_SysBase(PC)
	    move.l  d5,a4
sl1	    move.l  0(a4),a4
	    tst.l   0(a4)
	    beq.s   sl2
	    addq.b  #1,entries
	    move.l  a4,0(a5)
	    move.l  10(a4),4(a5)
	    move.b  33(a4),8(a5)
	    move.b  21(a4),9(a5)
	    move.b  23(a4),10(a5)
	    move.b  14(a4),11(a5)
	    lea     12(a5),a5
	    bra.s   sl1
sl2	    CALL    Permit,_SysBase(PC)

	    lea     buffer,a5
dl3	    tst.b   entries
	    beq.s   sl4
	    move.l  0(a5),d0
	    bsr     hexa
	    move.b  8(a5),d3
	    bsr     bytedec
	    move.b  9(a5),d3
	    bsr     bytedec
	    move.b  10(a5),d3
	    bsr     bytedec
	    move.b  11(a5),d0
	    bsr     bin
	    move.l  4(a5),d0
	    bsr     putnam
	    lea     12(a5),a5
	    subq.b  #1,entries
	    bra.s   dl3
sl4	    rts

;find the first entry in the device-list
;returns a1 = pointer to first entry

devinfo     move.l  dosbase(PC),a1
	    move.l  34(a1),a1
	    move.l  24(a1),a1
	    adda.l  a1,a1
	    adda.l  a1,a1
	    move.l  4(a1),a1
	    rts

;unlock a file
unlock	    bsr     readhex
	    tst.b   d7
	    beq     syntax
	    move.l  d0,remembr
	    move.l  d0,-(a7)
	    move    #-1,d6
	    bsr     of44
	    tst.l   remembr
	    beq.s   ul1
	    move.l  #unlerr,d0
	    bsr     putnam
	    bra     ul4
ul1	    move.l  #unl1,d0
	    bsr     putstr
	    move.l  0(a7),d0
	    bsr     getpath
	    move.l  #unltxt2,d0
	    bsr     putstr
	    bsr     readline
	    ori.b   #$20,dummy
	    cmp.b   #'y',dummy
	    bne.s   ul5
	    move.l  0(a7),d1
	    CALL    UnLock,dosbase
ul5	    bsr     freefinfo
ul4	    lea     4(a7),a7
	    rts
;---------- Show all Locks------------
locks	    clr.l   d6
	    bra.s   of33

;---------- Open Files-----------
openfiles   moveq   #1,d6
of33	    lea     ofheader(PC),a0
	    bsr     puthead
of44	    bsr     allocfinfo
	    bsr     devinfo
	    move.l  a1,a3
of1	    adda.l  a3,a3
	    adda.l  a3,a3
	    cmp.l   #2,4(a3)
	    bne     of2
	    move.l  40(a3),d0
	    lsl.l   #2,d0
	    move.l  d0,a4
	    clr.l   d3
	    move.b  (a4)+,d3
	    subq    #1,d3
	    lea     buffer,a5
of22	    move.b  (a4)+,(a5)+
	    dbf     d3,of22
	    move.b  #':',(a5)+
	    clr.b   0(a5)
	    cmp.l   #'RAM ',buffer
	    bne.s   of5
	    cmp.l   #'Disk',buffer+4
	    bne.s   of5
	    move.l  #$4d3a0000,buffer+2
of5	    move.l  #buffer,d1
	    move.l  #-2,d2
	    CALL    Lock,dosbase(PC)
	    tst.l   d0
	    bne.s   of6
	    move.l  #buffer,d0
	    bsr     putstr
	    move.l  #nomount,d0
	    bsr     putnam
	    bra     of2

of6	    move.l  d0,-(a7)
	    lsl.l   #2,d0
	    move.l  d0,a5
of4	    move.l  0(a5),d0
	    cmp.l   #50,d0
	    ble     of3
	    move.l  d0,d5
	    lsl.l   #2,d5
	    move.l  d5,a5
	    move.l  d0,d5
	    tst     d6
	    bpl.s   of45

	    cmp.l   remembr(PC),d0
	    bne.s   of3
	    clr.l   remembr
	    move.l  (a7)+,d1
	    CALL    UnLock,dosbase(PC)
	    rts

of45	    move.l  8(a5),d4
	    bsr     getfinfo
	    move.l  finfoptr,a4

	    tst.l   d6
	    beq.s   of8
	    bmi.s   of8
	    tst.l   4(a4)
	    bpl     of4
of8	    move.l  d5,d0
	    bsr     hexa
	    move.l  #access,d0
	    cmp     #-2,d4
	    beq.s   of7
	    add.l   #8,d0
of7	    bsr     putstr
	    tst.l   4(a4)
	    bmi.s   of9
	    move.l  #longnix,d0
	    bsr     putstr
	    bra     of10
of9	    move.l  124(a4),d0
	    bsr     longdec
of10	    move.l  d5,d0
	    bsr     getpath
	    bra     of4

	    bsr     newline
of3	    move.l  (a7)+,d1
	    CALL    UnLock,dosbase(PC)
of2	    move.l  0(a3),a3
	    cmpa.l  #0,a3
	    bne     of1
	    bsr     freefinfo
	    rts

;---------- Dos Devices ----------

devices     lea     ddheader(PC),a0
	    bsr     puthead
	    bsr     devinfo
dev1	    adda.l  a1,a1
	    adda.l  a1,a1
	    clr.b   d6
	    tst.l   4(a1)
	    bne     dev2
	    move.l  40(a1),d0
	    bsr     putbcpl
	    move.l  #10,d1
	    bsr     tab
	    cmp.l   #20,28(a1)
	    ble     dev9
	    moveq   #1,d6
	    move.l  28(a1),a3
	    adda.l  a3,a3
	    adda.l  a3,a3
	    cmp.l   #20,8(a3)
	    ble     dev9
	    move.l  8(a3),a2
	    adda.l  a2,a2
	    adda.l  a2,a2
	    move.l  12(a2),d3
	    movem.l a1-a3,-(a7)
	    bsr     bytedec
	    movem.l (a7)+,a1-a3
	    moveq   #1,d3
	    move.l  20(a2),d0
	    bsr     longdec
	    move.l  40(a2),d0
	    beq.s   devs20
	    addq    #1,d0
	    sub.l   36(a2),d0
devs20	    bsr     longdec
	    move.l  44(a2),d0
	    bsr     longdec
	    bra.s   dev8
dev9	    move.l  #notfile,d0
	    bsr     putstr
dev8	    tst.l   8(a1)
	    beq.s   dev6
	    move.l  #devload,d0
	    bra.s   dev5
dev6	    move.l  #devnload,d0
dev5	    bsr     putstr
	    tst.b   d6
	    beq.s   dev7
	    move.l  4(a3),d0
	    bne.s   dev4
dev7	    move.l  16(a1),d0
	    bne.s   dev4
	    tst.l   8(a1)
	    beq.s   dev11
	    move.l  8(a1),a3
	    move.l  -82(a3),d0
	    bsr     putstr
	    bra     dev11
dev4	    bsr     putbcpl
dev11	    bsr     newline
dev2	    move.l  0(a1),a1
	    cmpa.l  #0,a1
	    bne     dev1
	    rts

; Check if a named dos-device is mounted
; name in 'buffer'.
; Result: d0 = 0(false) anything else(true).

finddev     bsr     devinfo
fdev1	    adda.l  a1,a1
	    adda.l  a1,a1
	    clr.b   d6
	    tst.l   4(a1)
	    bne.s   fdev2
	    move.l  40(a1),a2
	    lea     buffer,a0
	    bsr     strbcmp
	    tst     d0
	    bne.s   fdev3
fdev2	    move.l  0(a1),a1
	    cmpa.l  #0,a1
	    bne.s   fdev1
fdev3	    rts

; Re-assign a drive to dos

freedrive   clr.l   dp_Arg1
	    bra     ldr3

; Inhibit a disk drive

lockdrive   move.l  #1,dp_Arg1
ldr3	    bsr     getstr
	    bsr     finddev
	    bne.s   ldr1
ldr2	    move.l  #buffer,d0
	    bsr     putstr
	    move.l  #nomount,d0
	    bra     putstr
	    move.l  #dishelp,d0
	    bra     putnam
ldr1	    move.l  #buffer,d1
	    CALL    DeviceProc,dosbase(PC)
	    tst.l   d0
	    beq.s   ldr2
	    move.l  d0,a0
	    move.l  #31,dp_Type
	    bra     cons1

;display the current directory of all processes,
;except Workbench.(Worbench pr_CurrentDir is not a lock)

currentdir  lea     wbname(PC),a1
	    CALL    FindTask,_SysBase(PC)
	    move.l  d0,wbaddr
	    lea     cdheader(PC),a0
	    bsr     puthead
	    bsr     allocfinfo
	    bsr     getaskdat
	    lea     buffer,a5
cd2	    tst.b   entries
	    beq.s   cd6
	    cmp.b   #13,8(a5)
	    bne.s   cd5
	    move.l  wbaddr(PC),d0
	    cmp.l   0(a5),d0
	    beq.s   cd5
	    move.l  4(a5),d0
	    bsr     putstr
	    move.l  #15,d1
	    bsr     tab
	    move.l  0(a5),a4
	    move.l  152(a4),d0
	    bne.s   cd1
	    move.l  #syst,d0
	    bsr     putnam
	    bra.s   cd5
cd1	    bsr     getpath
cd5	    subq.b  #1,entries
	    lea     12(a5),a5
	    bra.s   cd2
cd6	    bsr     freefinfo
	    rts

;Change the current directory setting of a process

cd	    move.l  a0,-(a7)
	    lea     wbname(PC),a1
	    CALL    FindTask,_SysBase(PC)
	    move.l  d0,wbaddr
	    move.l  (a7)+,a0
	    bsr     getstr
	    move.l  a0,-(a7)
	    move.l  #buffer,d1
	    move.l  #-2,d2
	    CALL    Lock,dosbase(PC)
	    move.l  (a7)+,a0
	    tst.l   d0
	    bne     cd16
	    move.l  #dnotf,d0
	    bra     putnam
cd16	    move.l  d0,remembr
	    move.l  a0,-(a7)
	    bsr     allocfinfo
	    move.l  remembr(PC),d0
	    bsr     getfinfo
	    move.l  finfoptr,a5
	    move.l  (a7)+,a0
	    tst.l   4(a5)
	    bpl.s   cd11
	    move.l  #notdir,d0
	    bsr     putnam
	    bra     cd18
cd11	    bsr     nodenam
	    moveq.l #2,d7
	    lea     TRuNode(PC),a4
	    bsr     findnam
	    tst.b   d7
	    beq.s   cd15
	    move.l  d0,a5
	    cmp.b   #13,8(a5)
	    beq.s   cd15
	    bsr     syntax
	    bra     cd18
cd15	    cmp.l   wbaddr,d0
	    bne.s   cd13
	    move.l  #wberr,d0
	    bsr     putnam
	    bra     cd12
cd13	    move.l  152(a5),d1
	    move.l  remembr,152(a5)
	    move.l  d1,remembr
cd12	    tst.l   remembr
	    beq.s   cd14
	    move.l  #unltxt,d0
	    bsr     putstr
	    move.l  remembr(PC),d0
	    bsr     getpath
	    move.l  #unltxt2,d0
	    bsr     putstr
	    bsr     readline
	    ori.b   #$20,dummy
	    cmp.b   #'y',dummy
	    bne.s   cd14
cd18	    move.l  remembr(PC),d1
	    beq.s   cd14
	    CALL    UnLock,dosbase(PC)
cd14	    bsr     freefinfo
cd10	    rts

;get all screen pointers.
;result: d5=number of screens
;	 buffer+100 holds pointers.

getscr	    lea     scrheader(PC),a0
	    bsr     puthead
getscr2     move.l  intuibase(PC),a2
	    move.l  60(a2),a2
	    lea     buffer+100,a1
	    move.w  #$4000,$dff09a
	    clr.l   d5
sr1	    move.l  a2,(a1)+
	    move.l  0(a2),a2
	    addq.l  #1,d5
	    cmpa.l  #0,a2
	    bne.s   sr1
	    subq    #1,d5
	    move.w  #-$4000,$dff09a
	    rts

;display screen addresses and titles

screens     bsr     getscr
	    moveq   #1,d6
	    lea     buffer+100,a1
sr2	    move    d6,d3
	    bsr     bytedec
	    move.l  0(a1),d0
	    bsr     hexa
	    move.l  (a1)+,a2
	    move.l  22(a2),d0
	    bsr     putnam
	    addq    #1,d6
	    dbf     d5,sr2
	    rts

;display window addresses and titles

windows     clr.b   bool
windows1    bsr     getscr
	    tst.b   bool
	    beq.s   wn20
	    move.l  d5,-(a7)
	    lea     fohead(PC),a0
	    bsr     puthead
	    move.l  (a7)+,d5
wn20	    lea     buffer+100,a4
wn2	    move.l  #onscr,d0
	    bsr     putstr
	    move.l  (a4)+,a2
	    move.l  22(a2),d0
	    bsr     putnam
	    move.l  4(a2),a1
	    clr     d6
wn1	    cmpa.l  #0,a1
	    beq.s   wn3
	    addq    #1,d6
	    move.l  d6,d3
	    bsr     bytedec
	    move.l  a1,d0
	    bsr     hexa
	    move.l  32(a1),d0
	    bsr     putnam

	    tst.b   bool
	    beq.s   wn21
	    move.l  a1,-(a7)
	    move.l  50(a1),a1
	    move.l  52(a1),a1
	    bsr     fontdata
	    move.l  (a7)+,a1

wn21	    move.l  0(a1),a1
	    bra.s   wn1
wn3	    dbf     d5,wn2
	    rts

;close a specified screen

closescreen bsr     getscr2
	    moveq   #1,d6
	    cmp.b   #'$',0(a0)
	    bne.s   cs1
	    bsr     readhex
	    tst     d7
	    beq     syntax
	    move.l  d0,d4
csin	    clr.l   d6
cs1	    lea     buffer+100,a2
cs5	    tst     d6
	    bne.s   cs2
	    cmp.l   (a2)+,d4
	    beq.s   cs3
	    bra.s   cs4
cs2	    move.l  (a2)+,a1
	    move.l  22(a1),a1
	    bsr     strcmp
	    tst     d0
	    beq.s   cs3
cs4	    dbf     d5,cs5
	    move.l  #scnofound,d0
	    bra     putnam
cs3	    move.l  -4(a2),a0
	    CALL    CloseScreen,intuibase(PC)
	    rts

;close a specified window

closewindow bsr     getscr2
	    moveq   #1,d6
	    cmp.b   #'$',0(a0)
	    bne.s   cw1
	    bsr     readhex
	    tst     d7
	    beq     syntax
cwin	    move.l  d0,d4
	    clr.l   d6
cw1	    lea     buffer+100,a2
cw5	    move.l  (a2)+,a4
	    move.l  4(a4),a4
cw6	    cmpa.l  #0,a4
	    beq.s   cw4
	    tst     d6
	    bne.s   cw2
	    cmp.l   a4,d4
	    beq.s   cw3
	    bra.s   cw7
cw2	    move.l  32(a4),a1
	    bsr     strcmp
	    tst     d0
	    beq.s   cw3
cw7	    move.l  0(a4),a4
	    bra.s   cw6
cw4	    dbf     d5,cw5
	    move.l  #winnofound,d0
	    bra     putnam
cw3	    move.l  a4,a0
	    clr.l   d0
	    CALL    ModifyIDCMP,intuibase(PC)
	    move.l  a4,a0
	    CALL    CloseWindow,intuibase(PC)
	    rts

windowoff   movem.l d1-d7/a0-a6,-(a7)
	    bsr     getscr2
	    bsr     cwin
	    move.l  -(a2),a0
	    move.l  a0,d4
	    tst.l   4(a0)
	    bne.s   woff1
	    bsr     getscr2
	    bsr     csin
woff1	    movem.l (a7)+,d1-d7/a0-a6
	    rts

closetskwin movem.l d1-d7/a0-a6,-(a7)
ctw0	    bsr     getscr2
	    lea     buffer+100,a2
ctw1	    move.l  (a2)+,a4
	    move.l  4(a4),a4
ctw6	    cmpa.l  #0,a4
	    beq.s   ctw4
	    move.l  86(a4),a0
	    move.l  16(a0),d1
	    cmp.l   d0,d1
	    bne.s   ctw7
	    move.l  d0,d1
	    move.l  a4,d0
	    bsr     windowoff
	    move.l  d1,d0
	    bra     ctw0
ctw7	    move.l  0(a4),a4
	    bra.s   ctw6
ctw4	    dbf     d5,ctw1
	    movem.l (a7)+,d1-d7/a0-a6
	    rts

;display windows and associated fonts

windowfonts move.b  #1,bool
	    bra     windows1

;display loaded font names and definitions

fonts	    lea     fohead(PC),a0
	    bsr     puthead
	    move.l  gfxbase(PC),a1
	    move.l  $8c(a1),a1
fo1	    tst.l   0(a1)
	    beq.s   fo3
	    bsr     fontdata
	    move.l  0(a1),a1
	    bra     fo1
fo3	    rts

fontdata    move.l  a1,d0
	    bsr     hexa
	    move.w  30(a1),d3
	    bsr     bytedec
	    move.w  20(a1),d3
	    bsr     bytedec
	    move.w  24(a1),d3
	    bsr     bytedec
	    move.l  #romfnt,d0
	    btst    #1,23(a1)
	    beq.s   fod1
	    move.l  #diskfnt,d0
fod1	    bsr     putstr
	    move.b  32(a1),d3
	    bsr     bytedec
	    move.b  33(a1),d3
	    bsr     bytedec
	    move.l  10(a1),d0
	    bra     putnam

;set update rate

settime     bsr     getnum
	    tst.b   d7
	    beq.s   syntax
	    tst.w   d2
	    bne.s   st1
	    move.b  #1,d2
st1	    move.b  d2,timeout
	    rts
syntax	    move.l  #synerr,d0
	    bra     putnam

;copy a string from input to 'buffer'
;a0 = pointer to string

getstr	    lea     buffer,a5
gst2	    cmp.b   #' ',0(a0)
	    beq.s   gst1
	    cmp.b   #10,0(a0)
	    beq.s   gst1
	    move.b  (a0)+,(a5)+
	    bra.s   gst2
gst1	    clr.b   0(a5)
	    bra     kllblnks

;read in a nodename or a processname

nodenam     bsr     isdec
	    move.b  d2,procnum
nodenam2    bsr     kllblnks
	    move.l  a0,a5
gno1	    cmp.b   #10,(a0)+
	    bne.s   gno1
	    move.b  #0,-1(a0)
	    rts

;modify a task's priority

taskpri     bsr     getnum
	    tst.b   d7
	    beq     syntax
	    move.b  d2,newpri
	    bsr     nodenam
	    moveq.l #2,d7
	    lea     TRuNode(PC),a4
	    bsr     findnam
	    tst.b   d7
	    beq.s   tp1
	    move.l  d0,a1
	    move.b  newpri,d0
	    CALL    SetTaskPri,_SysBase(PC)
tp1	    rts

;set the priority of our task

mypri	    bsr     getnum
	    tst.b   d7
	    beq     syntax
	    move.l  _SysBase(PC),a1
	    move.l  276(a1),a1
	    move.l  d2,d0
	    CALL    SetTaskPri,_SysBase(PC)
	    rts

;cancel a task or a process. The theory is quite simple:
;(Process->ReturnAddr)-4 points to the return address on
;the stack. Task->SPReg points to the next instruction
;to be executed. We just need a
; *(Task->SPReg) = *(Process->ReturnAddr-4).
;If the process has been started from Dos (CLI) and
;the process is doing disk I/O, the CLI will respond with
;a GURU #87000004 (AsyncPKT=unexpected packed received).
;Thats why the calling CLI is also canceled.


cancel	    clr.l   remembr	    ;used for CLI stdio
	    clr.l   remembr2
	    clr.b   bool
	    bsr     nodenam
testagain   moveq.l #1,d7
	    lea     TReNode(PC),a4
	    bsr     findnam
	    move.l  a5,pointer
	    tst.b   d7
	    bne.s   canok
	    move.l  #stperr,d0
	    bra     putnam
canok	    move.l  d0,a1	   ;d0=task
	    cmp.b   #1,8(a1)       ;TASK ?
	    bne.s   isproc
	    CALL    RemTask,_SysBase(PC)
	    rts
isproc	    movem.l d0-d7/a0-a6,-(a7)
	    move.l  #-1,d0	      ;needed for recursive killing tasks
	    CALL    AllocSignal,_SysBase(PC)
	    clr.l   d1
	    bset    d0,d1
	    move.l  d1,cancelbit
	    move.l  d0,cancelbnum
	    movem.l (a7)+,d0-d7/a0-a6

	    clr.l   d5
	    tst.l   $ac(a1)         ;pr_CLI
	    beq.s   wascreproc
	    move.l  $80(a1),a2      ;Seglist
	    adda.l  a2,a2
	    adda.l  a2,a2
	    move.l  12(a2),d1       ;empty ?
	    bne.s   wascreproc
	    move.l  $ac(a1),a2      ;CommandLineInterface
	    adda.l  a2,a2
	    adda.l  a2,a2
	    move.l  60(a2),d5       ;cli_Module
	    tst.l   40(a2)          ;IsInteractive
	    beq     dosreturn
	    move.l  28(a2),remembr  ;yes,get Cli-Window locks
	    move.l  56(a2),remembr2
	    bra     dosreturn
wascreproc  tst.b   bool	    ;it is not a CLI, ask what to do
	    bne.s   unload
	    move.b  #3,bool
	    move.l  #canerr0,d0     ;ask for Workbench
	    bsr     putstr
	    bsr     readline
	    ori.b   #$20,dummy
	    cmp.b   #'y',dummy
	    beq.s   andagain
	    move.b  #2,bool
	    move.l  #canerr1,d0    ;ask for unload
	    bsr     putstr
	    bsr     readline
	    ori.b   #$20,dummy
	    cmp.b   #'y',dummy
	    bne.s   andagain
	    move.b  #1,bool
andagain    move.l  pointer(PC),a5
	    bra     testagain	   ;test if the task still there

unload	    move.l  128(a1),d4 ;get Segmentlist
	    beq.s   unl3
	    lsl.l   #2,d4
	    move.l  d4,a3
	    move.l  12(a3),d4
unl3	    tst.l   d4
	    bne.s   unl4
	    move.l  #unloaderr,d0 ;no Segments !?
	    bra     putnam

unl4	    cmp.b   #3,bool	       ;Workbench Task
	    bne.s   unl2
	    move.l  a1,-(a7)
	    move.l  #40,d0	       ;build a copy of the
	    move.l  #$10000,d1	       ;Worbench startup-message
	    CALL    AllocMem,_SysBase(PC)
	    move.l  d0,startmess
	    move.l  (a7)+,a1
	    move.l  d0,a0
	    move.b  #5,8(a0)
	    move.w  #20,18(a0)
	    move.l  d4,24(a0)
	    move.l  a1,d0
	    add.l   #92,d0
	    move.l  d0,20(a0)
	    movem.l a0-a1,-(a7)
	    lea     wbname(PC),a1
	    CALL    FindPort,_SysBase(PC)
	    movem.l (a7)+,a0-a1
	    move.l  d0,14(a0)

unl2	    cmp.b   #1,bool
	    bne.s   dosreturn
	    move.l  a1,-(a7)           ;unload process manualy
	    move.l  d4,d1
	    CALL    UnLoadSeg,dosbase(PC)
	    move.l  (a7)+,a1

dosreturn   move.l  140(a1),savedat ;Processnumber
dosret1     move.w  #$4000,$dff09a
	    move.l  54(a1),a3
	    move.l  #endtask,0(a3)
	    move.l  #2,106(a1)
	    move.l  mytask(PC),108(a1)
	    cmp.b   #4,15(a1)        ;if waiting
	    bne.s   doswait
	    move.l  a1,d4
	    CALL    Remove,_SysBase(PC)
	    move.l  d4,a1
	    lea     406(a6),a0       ; activate the task
	    CALL    AddHead,_SysBase(PC)
	    move.l  d4,a1
doswait     move.w  #-$4000,$dff09a
	    tst.b   bool
	    bne.s   endnodos
	    tst.l   d5
	    beq     endcanc
	    move.l  $ac(a1),a2
	    adda.l  a2,a2
	    adda.l  a2,a2
dwa1	    movem.l d0-d7/a0-a6,-(a7)
	    move.l  cancelbit(PC),d0
	    CALL    Wait,_SysBase(PC)
	    movem.l (a7)+,d0-d7/a0-a6
	    clr.l   d5
	    bra     dosret1

endcanc     move.l  a1,-(a7)
	    move.l  remembr(PC),d1    ;close CLI-Window
	    beq.s   ecan1	      ;if any
	    CALL    Close,dosbase(PC)
ecan1	    move.l  remembr2(PC),d1
	    beq.s   ecan2
	    CALL    Close,dosbase(PC)
ecan2	    move.l  (a7)+,a1

	    move.l  savedat(PC),d0   ;remove Task from
	    move.l  dosbase(PC),a2   ;TaskArray
	    move.l  34(a2),a2
	    move.l  0(a2),a2
	    adda.l  a2,a2
	    adda.l  a2,a2
	    lsl.l   #2,d0
	    clr.l   0(a2,d0)

endnodos    move.l  a1,d0
	    bsr     closetskwin
	    move.l  cancelbnum(PC),d0      ;remove our Signal
	    CALL    FreeSignal,_SysBase(PC)
	    rts

;This Code is (hopefully) excuted by the Process we want
;to kill

endtask     CALL    Forbid,_SysBase(PC)
	    CALL    Disable,_SysBase(PC)
	    move.l  _SysBase(PC),a1
	    move.l  276(a1),a1
	    move.l  176(a1),a1          ;Process_ReturnAddr
	    lea     -4(a1),a7           ;reset Process Stackptr
	    tst.b   bool
	    bne.s   et0
	    movea.l mytask(PC),a1
	    move.l  cancelbit(PC),d0    ;signal Xoper it
	    CALL    Signal,_SysBase(PC) ;died
et0	    cmp.b   #3,bool		;Workbench Process ?
	    bne.s   et1
	    move.l  startmess(PC),a1
	    CALL    ReplyMsg,_SysBase(PC) ;reply startup message
et1	    rts

;Stop a task (just queue it on a special list)

freeze	    bsr     nodenam
	    moveq.l #1,d7
	    lea     TReNode(PC),a4
	    bsr     findnam
	    tst.b   d7
	    bne.s   frok
	    move.l  #stperr,d0
	    bra     putstr
frok	    move.w  #$4000,$dff09a
	    move.l  d0,a1
	    CALL    Remove,_SysBase(PC)
	    move.w  #-$4000,$dff09a
	    move.l  d0,a1
	    move.l  d0,a5
	    lea     stplist(PC),a0
	    CALL    AddHead,_SysBase(PC)
	    add.b   #4,15(a5)
	    rts
;put the task back on its list
warm	    bsr     nodenam
	    lea     stplist(PC),a0
	    movea.l a5,a1
	    clr.l   d7
	    bsr     fn4
	    tst.b   d7
	    bne.s   waok
	    move.l  #waerr,d0
	    bra     putstr
waok	    move.w  #$4000,$dff09a
	    move.l  d0,a1
	    CALL    Remove,_SysBase(PC)
	    move.l  d0,a1
	    move.l  d0,a5
	    move.l  TReNode,a0
	    cmp.b   #8,15(a1)
	    bne.s   wa1
	    move.l  TWaNode,a0
wa1	    adda.l  _SysBase(PC),a0
	    CALL    AddTail,_SysBase(PC)
	    move.l  d0,a1
	    sub.b   #4,15(a5)
	    move.w  #-$4000,$dff09a
	    rts
;show the hunks of a process
hunks	    bsr     nodenam
	    moveq.l #2,d7
	    lea     TRuNode(PC),a4
	    bsr     findnam
	    tst.b   d7
	    bne.s   hu1
	    rts
hu1	    move.l  d0,a4
	    cmp.b   #13,8(a4)
	    beq.s   hu2
	    move.l  #noprocs,d0
	    bra     putnam
hu2	    move.l  128(a4),d0
	    beq.s   noprogload
	    lsl.l   #2,d0
	    move.l  d0,a3
	    move.l  12(a3),d1
	    beq.s   hu3
	    move.l  #segloaded,d0
	    bsr     putnam
	    bra     hu5
hu3	    move.l  172(a4),d1
	    bne.s   hu4
noprogload  move.l  #notload,d0
	    bra     putnam
hu4	    move.l  #cliprocs,d0
	    bsr     putnam
	    lsl.l   #2,d1
	    move.l  d1,a4
	    move.l  60(a4),d1
	    beq.s   noprogload
	    move.l  #procloaded,d0
	    bsr     putstr
	    move.l  16(a4),d0
	    bsr     putbcpl
	    bsr     newline
hu5	    lea     hunkheader(PC),a0
	    bsr     puthead
hu6	    move.l  d1,d0
	    bsr     hexa
	    lsl.l   #2,d1
	    move.l  d1,a4
	    move.l  d1,d0
	    addq.l  #4,d0
	    bsr     hexa
	    move.l  -4(a4),d0
	    bsr     hexa
	    bsr     newline
	    move.l  0(a4),d1
	    bne.s   hu6
	    rts
;change the priority of a node
pri	    bsr     getnum
	    tst.b   d7
	    beq     syntax
	    move.b  d2,newpri
	    bsr     nodenam2
	    moveq.l #5,d7
	    lea     DevNode(PC),a4
	    bsr     findnam
	    tst.b   d7
	    beq.s   pi1
	    move.l  d0,a1
	    move.b  newpri,9(a1)
	    cmp.l   #SemNode,a4
	    ble.s   pi2
	    move.l  #listerr,d0
	    bra     putnam
pi2	    CALL    Forbid,_SysBase(PC)
	    CALL    Remove,_SysBase(PC)
	    move.l  d0,a1
	    move.l  a4,a0
	    move.l  0(a0),d6
	    lea     0(a6,d6),a0
	    CALL    Enqueue,_SysBase(PC)
	    CALL    Permit,_SysBase(PC)
pi1	    rts
;set all break signals of a task
break	    move.l  #$f000,d0
	    bra     setthem

signal	    bsr     readhex
	    tst.b   d7
	    beq     syntax
setthem     move.l  d0,savedat
	    bsr     nodenam
	    moveq.l #2,d7
	    lea     TReNode(PC),a4
	    bsr     findnam
	    tst.b   d7
	    beq.s   pi1
	    move.l  d0,a1
	    move.l  savedat,d0
	    and.l   18(a1),d0
	    CALL    Signal,_SysBase(PC)
	    rts

;'flushlibs'
flush	    move.l  #$ffffff,d0
	    clr.l   d1
	    CALL    AllocMem,_SysBase(PC)
	    rts

;display library->lib_IDString
info	    bsr     nodenam2
	    moveq.l #2,d7
	    lea     DevNode(PC),a4
	    bsr     findnam
	    tst.b   d7
	    beq.s   pi1
	    move.l  d0,a0
	    move.l  24(a0),d0
	    beq.s   if1
	    move.l  d0,d1
	    andi.l  #$ff000000,d1
	    bne.s   if1
	    bra     putnam
if1	    move.l  #noinfo,d0
	    bsr     putstr
	    move.l  a5,d0
	    bra     putnam

capture     move.l  _SysBase(PC),a1
	    lea     42(a1),a0
	    moveq   #2,d6
	    lea     coldtxt,a4
cap0	    move.l  a4,d0
	    bsr     putstr
	    move.l  0(a0),d0
	    bne.s   cap1
	    move.l  #unset,d0
	    bsr     putstr
	    bra     cap2
cap1	    bsr     hexa
cap2	    bsr     newline
	    lea     15(a4),a4
	    lea     4(a0),a0
	    dbf     d6,cap0

	    move.l  #kicktxt,d0
	    bsr     putstr
	    move.l  546(a1),a0
	    cmpa.l  #0,a0
	    bne.s   kickm3
	    move.l  #unset,d0
	    bra     putnam
kickm3	    move.l  a0,-(a7)
	    bsr     newline
	    lea     kickhead(PC),a0
	    bsr     puthead
	    move.l  (a7)+,a0
kickm0	    cmpa.l  #0,a0
	    bne.s   kickm1
	    rts
kickm1	    move.w  14(a0),d6
	    subq    #1,d6
	    lea     16(a0),a2
kickm2	    move.l  0(a2),d0
	    bsr     hexa
	    move.l  0(a2),d0
	    move.l  4(a2),d4
	    add.l   d4,d0
	    bsr     hexa
	    move.l  d4,d0
	    clr.b   d3
	    bsr     longdec
	    bsr     newline
	    lea     8(a2),a2
	    dbf     d6,kickm2
	    move.l  0(a0),a0
	    bra     kickm0
	    rts

clrcold     move.l  _SysBase,a0
	    clr.l   42(a0)
	    bra.s   chksum
clrcool     move.l  _SysBase,a0
	    clr.l   46(a0)
	    bra.s   chksum
clrwarm     move.l  _SysBase,a0
	    clr.l   50(a0)

chksum	    lea     34(a0),a1
	    move    #22,d0
addchk	    add     (a1)+,d1
	    dbf     d0,addchk
	    not     d1
	    move.w  d1,82(a0)
	    rts

;display ExecBase->LastAlert
lastalert   movem.l $100,d1-d2
	    tst.l   d1
	    bne.s   al1
	    move.l  _SysBase(PC),a0
	    movem.l 514(a0),d1-d2
	    bra.s   al1
alert	    movem.l $100,d1-d2
	    cmp.l   #'HELP',0
	    beq.s   al1
	    move.l  #noguru,d0
	    bra     putnam

al1	    move.l  #gurutxt,d0
	    bsr     putstr
	    move.l  d1,d0
	    bsr     hex8
	    lea     out,a0
	    move.l  ptr(PC),d0
	    move.b  #'.',-1(a0,d0)
	    move.l  d2,d0
	    bsr     hex8
	    bra     newline

;toggle '<MORE>' on/off
moretst     bchg    #0,morefl
	    rts
;toggle CPUSE task list
usage	    bchg    #0,usageflag
	    rts

;Open a library
openlib     bsr     nodenam2
	    move.l  a5,a1
	    clr.l   d0
	    CALL    OpenLibrary,_SysBase(PC)
	    tst.l   d0
	    beq     fn5
opli1	    bsr     clearscr
	    bra     showlibs

;close it
closelib    bsr     nodenam2
	    clr.l   d7
	    lea     LibNode(PC),a4
	    bsr     findnam
	    tst.b   d7
	    beq.s   clo1
	    move.l  d0,a1
	    CALL    CloseLibrary,_SysBase(PC)
	    bra     opli1

;toggle task-ports display on/off
taskports   bchg    #0,tports
clo1	    rts

;end Xoper but stay in background
hold	    lea     4(a7),a7
	    bra.s   instback
quithold    lea     in,a0
	    lea     dummy,a1
qh1	    move.b  (a1)+,d0
	    move.b  d0,(a0)+
	    cmp.b   #10,d0
	    bne.s   qh1

instback    tst.b   background
	    bne.s   cleanit
	    move.b  #1,background
	    bsr     installh
cleanit     tst.l   fileptr
	    beq.s   ib1
	    move.l  window(PC),a0
	    move.w  4(a0),window_l
	    move.w  6(a0),window_t
	    move.w  8(a0),window_w
	    move.w  10(a0),window_h
	    move.l  fileptr(PC),d1
	    CALL    Close,dosbase(PC)
	    clr.l   fileptr
ib1	    clr.b   running
	    move.l  mysignal(PC),d0
	    CALL    Wait,_SysBase(PC)
	    move.b  #1,running
	    bra     restart

;fill all unused memory-chunks with a longword
clear	    bsr     readhex
	    tst.b   d7
	    beq     syntax
	    move.l  _SysBase(PC),a0
	    clr.l   parmtxt
	    lea     322(a0),a0
	    move.w  #$4000,$dff09a
clr1	    move.l  0(a0),a0
	    tst.l   0(a0)
	    beq.s   clr4
	    move.l  16(a0),a1
clr2	    tst.l   0(a1)
	    beq.s   clr1
	    add.l   #1,parmtxt
	    move.l  4(a1),d1
	    sub.l   #8,d1
	    beq.s   clr31
	    lsr.l   #2,d1
	    subq.l  #1,d1
	    lea     8(a1),a2
clr3	    move.l  d0,(a2)+
	    dbf     d1,clr3
clr31	    move.l  0(a1),a1
	    bra.s   clr2
clr4	    move.w  #-$4000,$dff09a
	    move.l  parmtxt(PC),d0
	    bsr     bytedec
	    move.l  #clrtxt,d0
	    bra     putnam

;find a named node
;d7 = number of lists to search through
;a4 = pointer to the first entry in the
;     list-offset-table
;a5 = pointer to name
;returns:
;d7 = TRUE/FALSE 1/0
;d0 = node

findnam     cmp.b   #'$',0(a5)
	    bne.s   fn2
	    move.l  d7,d2
	    move.l  a5,a0
	    bsr     readhex
	    tst.b   d7
	    beq.s   fn6
	    move.l  d2,d7
	    bsr     tstnode
	    tst.l   d5
	    bne.s   fn3
	    bra     fn5
fn6	    move.l  d2,d7
fn2	    move.l  _SysBase(PC),a0
	    adda.l  0(a4),a0
	    move.l  a5,a1
fn4	    CALL    FindName,_SysBase(PC)
	    tst.l   d0
	    bne.s   fn1
	    lea     4(a4),a4
	    dbf     d7,fn2
fn5	    move.l  #namerr,d0
	    bsr     putstr
	    move.l  a5,d0
	    bsr     putnam
	    clr.b   d7
	    rts
fn1	    move.b  procnum(PC),d2
	    beq.s   fn3
	    move.l  d0,a0
	    cmp.b   143(a0),d2
	    bne.s   fn4
fn3	    moveq.l #1,d7
	    rts

;list-offset-table
TRuNode     dc.l    276
TReNode     dc.l    406
TWaNode     dc.l    420
DevNode     dc.l    350
LibNode     dc.l    378
ResNode     dc.l    336
MemNode     dc.l    322
PorNode     dc.l    392
SemNode     dc.l    532

;Node has been entered in hex. Check if this node exsists
tstnode     move.l  d0,d1
	    and.l   #$ff000001,d1
	    beq.s   inrange
	    move.l  #adrerr,d0
	    bsr     putnam
	    clr.l   d5
	    rts
inrange     movem.l d7/a4,-(a7)
	    cmp.l   #TRuNode,a4
	    bne.s   inrange1
	    move.l  _SysBase(PC),a0
	    cmp.l   276(a0),d0
	    beq.s   nodefound
	    subq    #1,d7
	    lea     4(a4),a4
inrange1    move.w  #$4000,$dff09a
getlist     move.l  _SysBase(PC),a0
	    add.l   0(a4),a0
nxtnode     tst.l   0(a0)
	    beq.s   nxtlist
	    cmp.l   a0,d0
	    beq.s   nodefound
	    move.l  0(a0),a0
	    bra.s   nxtnode
nxtlist     lea     4(a4),a4
	    dbf     d7,getlist
	    move.w  #-$4000,$dff09a
	    movem.l d0/d7/a4,-(a7)
	    move.l  #noderr,d0
	    bsr     putnam
	    bsr     readline
	    movem.l (a7)+,d0/d7/a4
	    or.b    #32,dummy
	    cmp.b   #'y',dummy
	    beq.s   nodefound1
	    clr.l   d5
	    movem.l (a7)+,d7/a4
	    rts
nodefound   move.w  #-$4000,$dff09a
nodefound1  move.b  #1,d5
etst	    movem.l (a7)+,d7/a0
	    rts

;clear our window
clearscr    move.l  #cls,d2
	    move.l  fileptr,d1
	    moveq.l #6,d3
	    CALL    Write,dosbase(PC)
	    rts
;allocate FileInfoBlock
allocfinfo  move.l  #260,d0
	    clr.l   d1
	    CALL    AllocMem,_SysBase(PC)
	    move.l  d0,finfoptr
	    rts

;free FileInfoBlock
freefinfo   move.l  #260,d0
	    move.l  finfoptr,a1
	    CALL    FreeMem,_SysBase(PC)
	    rts

;Examine ,d0=Lock
getfinfo    move.l  d0,d1
	    move.l  finfoptr,d2
	    CALL    Examine,dosbase(PC)
	    rts

;construct a Pathname from a lock
;d0=Lock ,resulting string is written to window
getpath     movem.l d1-d7/a0-a6,-(a7)
	    move.l  d0,d1
	    CALL    DupLock,dosbase(PC)
	    lea     out,a4
	    clr.b   -(a4)
gp0	    tst.l   d0
	    beq.s   putall
	    move.l  d0,-(a7)
	    bsr     getfinfo
	    move.l  finfoptr,a0
	    move.l  4(a0),d4
	    lea     8(a0),a0
	    bsr     strlen
	    lea     -1(a4),a5
	    tst.l   d4
	    bmi.s   nodir
	    move.b  #'/',-(a4)
nodir	    subq    #1,d0
	    bmi.s   nofnam
gp1	    move.b  0(a0,d0),-(a4)
	    dbf     d0,gp1
nofnam	    move.l  0(a7),d1
	    CALL    ParentDir,dosbase(PC)
	    move.l  d0,d4
	    move.l  (a7)+,d1
	    CALL    UnLock,dosbase(PC)
	    move.l  d4,d0
	    bra     gp0
putall	    cmp.b   #'/',0(a5)
	    bne.s   gp2
	    move.b  #':',0(a5)
gp2	    move.l  a4,d0
	    bsr     putnam
	    movem.l (a7)+,d1-d7/a0-a6
	    rts
strlen	    move.l  a0,-(a7)
	    move.l  #-1,d0
strl2	    addq.l  #1,d0
	    tst.b   (a0)+
	    bne.s   strl2
	    move.l  (a7)+,a0
	    rts

;write a title and underline
;a0 = pointer to text
puthead1    bsr     strlen
	    move.l  d0,d5
	    move.l  a0,d0
	    bra     putstr

puthead2    bsr     strlen
	    add.l   d0,d5
	    bra.s   ph2

puthead     bsr     strlen
	    move.l  d0,d5
ph2	    move.l  a0,d0
	    bsr     putnam
	    lea     out,a0
	    move.l  a0,d0
ph1	    move.b  #'-',(a0)+
	    dbf     d5,ph1
	    move.b  #$9b,(a0)+
	    move.b  #'K',(a0)+
	    move.b  #$0a,(a0)+
	    clr.b   0(a0)
	    bra     putstr

;move cursor to a column
;d0 = current position
;d1 = column
tab	    move.l  a3,-(a7)
	    lea     out,a3
sp5	    cmp.b   d1,d0
	    bcc.s   sp4
	    move.b  #' ',0(a3,d0)
	    addq.b  #1,d0
	    bra.s   sp5
sp4	    move.l  d1,ptr
	    move.l  (a7)+,a3
	    rts

;convert ascii to byte
;a0 = pointer to text
;d0 = byte
getnum	    cmp.b   #'$',0(a0)
	    bne.s   isdec
	    bsr     readhex
	    move.l  d0,d2
	    rts
isdec	    clr.w   d2
	    clr.w   d3
	    clr.b   d6
	    clr.b   d7
	    cmp.b   #'-',0(a0)
	    bne.s   gn1
	    lea     1(a0),a0
	    moveq.l #1,d6
gn1	    move.b  (a0)+,d3
	    cmp.b   #'9',d3
	    bhi.s   gn2
	    cmp.b   #'0',d3
	    bcs.s   gn2
	    moveq.l #1,d7
	    and.b   #$f,d3
	    muls    #10,d2
	    add.w   d3,d2
	    bra.s   gn1
gn2	    tst.b   d6
	    beq.s   gn3
	    neg.w   d2
gn3	    tst.b   d7
	    bne.s   gn4
	    lea     -1(a0),a0
gn4	    rts

;convert hex to longword
;a0 = pointer to text
;returns d0=value
;d7 = ok/error 1/0
readhex     movem.l d1-d6/a1-a5,-(a7)
	    moveq.b #1,d7
	    cmp.b   #'$',0(a0)
	    bne.s   rh3
	    lea     1(a0),a0
rh3	    clr.l   d0
	    lea     hextab(pc),a1
rh0	    move.b  (a0)+,d3
	    moveq.l #15,d2
rh1	    cmp.b   0(a1,d2),d3
	    beq.s   rh2
	    dbf     d2,rh1
	    bra     rhend
rh2	    lsl.l   #4,d0
	    or.b    d2,d0
	    bra.s   rh0
rhend	    tst.b   d3
	    beq.s   rhok
	    cmpi.b  #10,d3
	    beq.s   rhok
	    cmpi.b  #' ',d3
	    beq.s   rhok
	    clr.l   d7
rhok	    movem.l (a7)+,d1-d6/a1-a5
	    rts

;skip blanks
;a0 pointer to text
; returns a0 = new pointer position
kllblnks    cmpi.b  #' ',0(a0)
	    bne.s   gn4
	    lea     1(a0),a0
	    bra.s   kllblnks

; exit program. If background flag is set, wait for
; amiga-amiga-x

stopall     lea     4(a7),a7
	    bra     exitall

exit	    tst.b   background
	    bne     quithold
exitall     move.l  stplist(PC),a3
	    tst.l   0(a3)
	    beq.s   ex0
	    move.l  a3,d0
	    bsr     waok
	    bra.s   exitall

ex0	    tst.b   background
	    beq.s   ex1
	    bsr     removeh

ex1	    move.l  _SysBase(PC),a1
	    move.l  #_LVOSwitch,a0
	    move.l  oldswitch,d0
	    CALL    SetFunction,_SysBase(PC)

	    move.l  replyport,-(a7)
	    LIBCALL DeletePort
	    lea     4(a7),a7
	    move.l  fileptr(PC),d1
	    CALL    Close,dosbase(PC)
	IFND DEBUG
	    CALL    Forbid,_SysBase(PC)
	    move.l  wbmsg(PC),d0
	    beq.s   todos
	    move.l  d0,a1
	    CALL    ReplyMsg,_SysBase(PC)
	    clr.l   d0
	    rts

todos	    move.l  myseg(PC),d1
	    CALL    UnLoadSeg,dosbase(PC)
	ENDC
	    clr.l   d1
	    CALL    Exit,dosbase(PC)

;print a bcpl-string
;d0 = bcpl-pointer to bcpl-string
putbcpl     movem.l d3/a0-a1,-(a7)
	    tst.l   d0
	    beq.s   pb1
	    lsl.l   #2,d0
	    move.l  d0,a1
	    clr.l   d3
	    move.b  (a1)+,d3
	    move.l  ptr(PC),d0
	    lea     out,a0
pb2	    move.b  (a1)+,0(a0,d0)
	    addq.b  #1,d0
	    dbf     d3,pb2
	    move.l  d0,ptr
pb1	    movem.l (a7)+,d3/a0-a1
	    rts

;compare strings
;a0/a1 = pointers to string
;returns d0 = true(0) false(1)
strcmp	    movem.l a0-a1,-(a7)
	    clr.l   d0
src2	    move.b  (a0)+,d0
	    beq.s   src1
	    cmp.b   #10,d0
	    beq.s   src1
	    cmp.b   (a1)+,d0
	    beq.s   src2
	    bra.s   src3
src1	    move.b  0(a1),d0
src3	    movem.l (a7)+,a0-a1
	    rts

;compare bcpl string with string
;a0 = pointer to string
;a2 = bcpl-pointer to bcpl-string
;returns d0 = true(0) false(1)
strbcmp     movem.l d1/a0/a2,-(a7)
	    clr.l   d0
	    clr.l   d1
	    adda.l  a2,a2
	    adda.l  a2,a2
	    move.b  (a2)+,d1
	    beq.s   stb1
	    subq    #1,d1
stb2	    cmp.b   (a2)+,(a0)+
	    bne.s   stb1
	    dbf     d1,stb2
	    moveq   #1,d0
stb1	    movem.l (a7)+,d1/a0/a2
	    rts

;concat strings
;a0 = pointer to string
;a1 = pointer to string to be appended
;returns d0 = strlen
strcat	    movem.l d1/a0-a1,-(a7)
	    bsr     strlen
	    move.l  d0,d1
	    exg     a0,a1
	    bsr     strlen
	    adda.w  d1,a1
stc1	    move.b  (a0)+,(a1)+
	    dbf     d0,stc1
	    move.l  a1,d0
	    movem.l (a7)+,d1/a0-a1
	    sub.l   a0,d0
	    rts

;convert long to decimal
;d0 = value
;d3 bit 0 = left/right justified
;d3 bit 1 = write/leave
;returns string in 'buffer'
longdec     movem.l d1-d2/a1-a2,-(a7)
	    lea     binarea+8(PC),a1
	    move.l  #'    ',-8(a1)
	    move.l  #'    ',-4(a1)
	    clr.b   0(a1)
	    lea     -1(a1),a1
	    cmp     #2,d3
	    bne.s   ld5
	    clr.b   0(a1)
ld5	    moveq   #1,d2
ld2	    addq    #1,d2
	    moveq   #$a,d1
	    bsr     div
	    addi.l  #$30,d1
	    move.b  d1,-(a1)
	    tst.l   d0
	    bne.s   ld2

	    btst    #0,d3
	    bne.s   ld1
	    lea     binarea(PC),a2
ld3	    move.b  0(a1),(a2)+
	    move.b  #' ',(a1)+
	    dbf     d2,ld3
ld1	    cmp     #2,d3
	    beq.s   ld4
	    move.l  #binarea,d0
	    bsr     putstr
ld4	    movem.l (a7)+,d1-d2/a1-a2
	    rts

;write UBYTE
;d3 = value
bytedec     move.l  #dezimal,d0
pm1	    bsr     dec
	    bra     putstr

;write signed byte
;d3 = value
plusmins    move.l  #minus+1,d0
	    move.w  #$2020,minus
	    tst.b   d3
	    bpl.s   pm1
	    neg.b   d3
	    jsr     dec
	    move.b  #'-',-(a3)
	    bra.s   putstr

dec	    move.l  #$20202020,dezimal
	    clr.l   d4
	    and.l   #$ff,d3
	    lea     dezimal+3(PC),a3
bloop	    tst.b   d3
	    beq.s   bend
	    divu    #10,d3
	    swap    d3
	    ori.b   #48,d3
	    move.b  d3,-(a3)
	    clr.w   d3
	    swap    d3
	    bra.s   bloop
bend	    cmpa.l  #dezimal+3,a3
	    bne     nixfirst
	    move.b  #'0',-(a3)
nixfirst    rts

;write a string, move cursor into next line
;d0 = pointer to text
putnam	    bsr     putstr
	    tst.b   d0
	    beq.s   ncr
	    bsr     newline
ncr	    rts

;write one char
;d0 = char
putchar     movem.l d1/a0,-(a7)
	    move.l  ptr(PC),d1
	    lea     out,a0
	    move.b  d0,0(a0,d1)
	    add.l   #1,ptr
	    movem.l (a7)+,d1/a0
	    rts

;write a string, strings are only written when they end with CR
;d0 = pointer to string
;returns d0 = cursor position
putstr	    movem.l d1-d7/a0-a6,-(a7)
	    move.b  #1,printed
	    move.l  d0,a2
	    lea     out,a3
	    move.l  ptr(PC),d0
	    cmp.l   #0,a2
	    beq     prend
pst1	    move.b  (a2)+,d1
	    cmpi.b  #13,d1
	    beq     pst1
	    move.b  d1,0(a3,d0)
	    beq     prend
	    addq    #1,d0
	    cmpi.b  #$0a,d1
	    bne.s   pst1
	    move.l  d0,d3
	    move.l  a3,d2
	    move.l  fileptr,d1
	    CALL    Write,dosbase(PC)
	    clr.l   d0
	    tst.b   morefl
	    beq.s   pst1
	    tst.b   mnflag
	    beq.s   pst1
	    add.b   #1,row
	    move.b  row(PC),d1
	    cmp.b   rows,d1
	    bne.s   pst1
	    move.l  #6,d3
	    move.l  fileptr,d1
	    move.l  #more,d2
	    CALL    Write,dosbase(PC)
	    bsr     con
	    bsr     readline
	    bsr     raw
	    clr.b   row
	    move.l  #4,d3
	    move.l  fileptr,d1
	    move.l  #thisline,d2
	    CALL    Write,dosbase(PC)
	    clr.l   d0
	    bra     pst1
prend	    move.l  d0,ptr
	    movem.l (a7)+,d1-d7/a0-a6
	    rts

;Write 8 byte hex value
;d0 = value
hex8	    movem.l d1-d7/a0-a6,-(a7)
	    moveq.l #7,d5
	    lea     hex8area(PC),a1
	    bra     hx1

;Write 6 byte hex value
;d0 = value
hexa	    movem.l d1-d7/a0-a6,-(a7)
	    moveq.l #5,d5
	    lea     hexarea(PC),a1
hx1	    lea     hextab(PC),a0
	    clr.l   d2
hexloop     move.b  d0,d2
	    and.b   #15,d2
	    move.b  0(a0,d2),0(a1,d5)
	    lsr.l   #4,d0
	    dbf     d5,hexloop
	    move.l  a1,d0
	    movem.l (a7)+,d1-d7/a0-a6
	    bra     putstr

;Convert/write byte into binary string
;d0 = value
bin	    movem.l d1-d7/a0-a6,-(a7)
	    moveq.l #7,d4
	    lea     binarea(PC),a0
binloop     moveq.l #'0'/2,d1
	    roxr.b  #1,d0
	    roxl.b  #1,d1
	    move.b  d1,0(a0,d4)
	    dbf     d4,binloop
	    move.l  a0,d0
	    movem.l (a7)+,d1-d7/a0-a6
	    bra     putstr

;read one line of input string
readline    move.l  fileptr,d1
	    move.l  #dummy,d2
	    moveq.l #80,d3
	    CALL    Read,dosbase(PC)
	    rts

;switch console to con: mode & empty input buffer
con	    bsr     cmdcon
	    move.l  #50,d2
	    move.l  fileptr,d1
	    CALL    WaitForChar,dosbase(PC)
	    beq.s   conend
	    bsr     readline
conend	    rts


cmdcon	    clr.l   dp_Arg1
	    move.l  conmsg,a0
	    move.l  #994,dp_Type
	    bra.s   cons1

;switch console window to raw mode
raw	    move.l  conmsg,a0
	    move.l  #994,dp_Type
	    move.l  #-1,dp_Arg1

;send a packet
;a0 = msgport
;dp_Type and dp_Arg1 have to be inizialized
cons1	    movem.l d0-d7/a0-a6,-(a7)
	    move.l  #dp_Link,LN_NAME
	    move.l  #mypacket,dp_Link
	    move.l  replyport,dp_Port
	    lea     mypacket,a1
	    CALL    PutMsg,_SysBase(PC)
	    move.l  replyport,a0
	    CALL    WaitPort,_SysBase(PC)
	    movem.l (a7)+,d0-d7/a0-a6
	    rts

;32-bit division
;d0 / d1
;returns d0
div	    movem.l d2-d3,-(a7)
	    swap    d1
	    move.w  d1,d2
	    bne.s   div1
	    swap    d0
	    swap    d1
	    swap    d2
	    move.w  d0,d2
	    beq.s   div2
	    divu    d1,d2
	    move.w  d2,d0
div2	    swap    d0
	    move.w  d0,d2
	    divu    d1,d2
	    move.w  d2,d0
	    swap    d2
	    move.w  d2,d1
	    bra     div8
div1	    moveq   #$10,d3
	    cmpi.w  #$80,d1
	    bcc.s   div3
	    rol.l   #8,d1
	    subq.w  #8,d3
div3	    cmpi.w  #$800,d1
	    bcc.s   div4
	    rol.l   #4,d1
	    subq.w  #4,d3
div4	    cmpi.w  #$2000,d1
	    bcc.s   div5
	    rol.l   #2,d1
	    subq.w  #2,d3
div5	    tst.w   d1
	    bmi.s   div6
	    rol.l   #1,d1
	    subq.w  #1,d3
div6	    move.w  d0,d2
	    lsr.l   d3,d0
	    swap    d2
	    clr.w   d2
	    lsr.l   d3,d2
	    swap    d3
	    divu    d1,d0
	    move.w  d0,d3
	    move.w  d2,d0
	    move.w  d3,d2
	    swap    d1
	    mulu    d1,d2
	    sub.l   d2,d0
	    bcc.s   div7
	    subq.w  #1,d3
	    add.l   d1,d0
div7	    moveq   #0,d1
	    move.w  d3,d1
	    swap    d3
	    rol.l   d3,d0
	    swap    d0
	    exg     d1,d0
div8	    movem.l (a7)+,d2-d3
	    rts

;install a input-handler
installh    pea     0
	    pea     0
	    LIBCALL CreatePort
	    lea     8(a7),a7
	    move.l  d0,InputMsg
	    move.l  d0,-(a7)
	    LIBCALL CreateStdIO
	    lea     4(a7),a7
	    move.l  d0,InRequest
	    move.l  d0,a1
	    lea     devicenam(PC),a0
	    clr.l   d0
	    clr.l   d1
	    CALL    OpenDevice,_SysBase(PC)
	    move.l  d0,devstatus
	    movea.l InRequest(PC),a1
	    move.l  #InInterrupt,40(a1)
	    move.w  #9,28(a1)
	    CALL    DoIO,_SysBase(PC)
	    move.l  d0,iostatus
	    move.l  #-1,d0
	    CALL    AllocSignal,_SysBase(PC)
	    clr.l   d1
	    bset    d0,d1
	    move.l  d1,mysignal
	    rts

;remove handler
removeh     movea.l InRequest(PC),a1
	    move.l  #InInterrupt,40(a1)
	    move.w  #10,28(a1)
	    CALL    DoIO,_SysBase(PC)
	    movea.l InRequest(PC),a1
	    CALL    CloseDevice,_SysBase(PC)
	    move.l  InRequest,-(a7)
	    LIBCALL DeleteStdIO
	    lea     4(a7),a7
	    move.l  InputMsg,-(a7)
	    LIBCALL DeletePort
	    lea     4(a7),a7
	    rts

;this is the handler, it checks if amiga-amiga-x
;has been pressed and signals it to our task
Keyhandler  tst.b   running
	    bne.s   endhandler
	    cmp.b   #1,4(a0)
	    bne.s   endhandler
	    move.w  8(a0),d0
	    andi.w  #$c0,d0
	    cmpi.w  #$c0,d0
	    bne.s   endhandler
	    cmp.w   #$32,6(a0)
	    bne.s   endhandler
wakeup	    move.l  a0,-(a7)
	    movea.l mytask(PC),a1
	    move.l  mysignal(PC),d0
	    CALL    Signal,_SysBase(PC)
	    move.l  (a7)+,a0
	    clr.b   4(a0)
endhandler  move.l  a0,d0
	    rts

snoop	    bsr     nodenam
	    moveq.l #2,d7
	    lea     TRuNode(PC),a4
	    bsr     findnam
	    tst.b   d7
	    beq     tm6
	    move.l  d0,captask
	    pea     0
	    pea     memportname
	    LIBCALL CreatePort
	    lea     8(a7),a7
	    move.l  d0,snoopport
	    beq     tm6
	    lea     snoophead(PC),a0
	    bsr     puthead
	    move.l  _SysBase(PC),a1
	    move.l  -196(a1),oldalloc
	    move.l  -208(a1),oldfree
	    move.l  #capmalloc,d0
	    move.l  #-198,a0
	    CALL    SetFunction,_SysBase(PC)
	    move.l  _SysBase(PC),a1
	    move.l  #capmfree,d0
	    move.l  #-210,a0
	    CALL    SetFunction,_SysBase(PC)
	    clr.b   bool
	    clr.b   cbreak
waitmem     move.l  snoopport(PC),a0
	    move.l  #$1000,d0
	    clr.l   d1
	    move.b  15(a0),d1
	    bset    d1,d0
	    CALL    Wait,_SysBase(PC)
	    btst    #12,d0
	    beq.s   tm7
	    move.b  #1,cbreak
tm7	    move.l  mytask(PC),a0
	    move.l  snoopport(PC),a0
	    CALL    GetMsg,_SysBase(PC)
	    tst.l   d0
	    bne     tm8
	    tst.b   cbreak
	    bne     snoopend
	    bra     waitmem
tm8	    move.l  d0,a3
	    move.l  20(a3),d3
	    btst    #31,d3
	    beq     freed
	    move.l  #allok,d0
	    bsr     putstr
	    lea     memname(PC),a2
	    lea     membit(PC),a4
	    move.l  #4,d5
tm2	    move.l  0(a4),d4
	    btst    d4,d3
	    beq.s   tm1
	    move.l  0(a2),d0
	    bsr     putstr
tm1	    lea     4(a2),a2
	    lea     4(a4),a4
	    dbf     d5,tm2
	    move.l  #26,d1
	    bsr     tab
	    move.l  24(a3),d0
	    move.l  d0,d3
	    bsr     hexa
	    move.l  28(a3),d0
	    bne.s   tm3
	    move.l  #failed,d0
	    bsr     putstr
	    move.l  #47,d1
	    bsr     tab
	    bra     tm4
tm3	    bsr     hexa
	    move.l  28(a3),d0
	    add.l   d3,d0
	    bsr     hexa
	    bra     tm4

freed	    move.l  #free,d0
	    bsr     putstr
	    move.b  #'-',d0
	    move.l  #18,d1
tm9	    bsr     putchar
	    dbf     d1,tm9
	    move.b  #' ',d0
	    bsr     putchar
	    move.l  d3,d0
	    bsr     hexa
	    move.l  24(a3),d0
	    bsr     hexa
	    move.l  24(a3),d0
	    add.l   d3,d0
	    bsr     hexa

tm4	    move.l  32(a3),d0
	    bsr     hexa
	    bsr     newline
	    move.l  #36,d0
	    move.l  a3,a1
	    CALL    FreeMem,_SysBase(PC)
	    bra     tm7

snoopend    move.l  _SysBase(PC),a1
	    move.l  oldalloc(PC),d0
	    move.l  #-198,a0
	    CALL    SetFunction,_SysBase(PC)
	    move.l  _SysBase(PC),a1
	    move.l  oldfree,d0
	    move.l  #-210,a0
	    CALL    SetFunction,_SysBase(PC)
	    move.l  snoopport,-(a7)
	    LIBCALL DeletePort
	    lea     4(a7),a7
tm6	    rts

memname     dc.l    memlarg,memclr,memfast,memchip,mempubl
membit	    dc.l    17,16,2,1,0

capmalloc   movem.l d0-d7/a0-a6,-(a7)
	    move.l  _SysBase(PC),a6
	    move.l  276(a6),d4
	    cmp.l   captask(PC),d4
	    bne.s   capm1
	    tst.b   bool
	    bne     capm1
	    move.b  #1,bool
	    move.l  d0,d5
	    move.l  d1,d6
	    bsr     allocmsg
	    beq     capm2
	    bset    #31,d6
	    move.l  d6,20(a1)
	    move.l  d5,24(a1)
	    move.l  60(a7),32(a1)
	    move.l  a1,remembr
	    movem.l (a7)+,d0-d7/a0-a6
	    bsr     memalloc
	    movem.l d0-d7/a0-a6,-(a7)
	    move.l  remembr(PC),a1
	    move.l  d0,28(a1)
	    move.l  snoopport,a0
	    move.b  #5,8(a1)
	    CALL    PutMsg,_SysBase(PC)
	    clr.b   bool
	    movem.l (a7)+,d0-d7/a0-a6
	    rts
capm2	    clr.b   bool
capm1	    movem.l (a7)+,d0-d7/a0-a6
memalloc    dc.w    $4ef9
oldalloc    dc.l    0

capmfree    movem.l d0-d7/a0-a6,-(a7)
	    move.l  _SysBase(PC),a6
	    move.l  276(a6),d4
	    cmp.l   captask(PC),d4
	    bne.s   capf1
	    tst.b   bool
	    bne.s   capf1
	    move.b  #1,bool
	    move.l  a1,d5
	    move.l  d0,d6
	    bsr     allocmsg
	    beq.s   capf2
	    move.l  d6,20(a1)
	    move.l  d5,24(a1)
	    move.l  60(a7),32(a1)
	    move.l  snoopport,a0
	    move.b  #5,8(a1)
	    CALL    PutMsg,_SysBase(PC)
capf2	    clr.b   bool
capf1	    movem.l (a7)+,d0-d7/a0-a6
	    dc.w    $4ef9
oldfree     dc.l    0

allocmsg    move.l  #36,d0
	    move.l  #65536,d1
	    bsr     memalloc
	    move.l  d0,a1
	    tst.l   d0
	    rts

myswitch    movem.l d0-d1/a0,-(a7)
	    move.l  _SysBase(PC),a0
	    move.l  276(a0),d0
	    move.l  tasksnum(PC),d1
	    lea     cputime,a0
	    subq.l  #1,d1
	    bmi.s   swadd
sw0	    cmp.l   0(a0),d0
	    beq.s   swi1
	    lea     8(a0),a0
	    dbf     d1,sw0
	    bra.s   swadd
swi1	    add.l   #1,4(a0)
swgo	    movem.l (a7)+,d0-d1/a0
	    dc.w    $4ef9
oldswitch   dc.l    0
swadd	    cmp.l   #50,tasksnum
	    bge.s   swgo
	    add.l   #1,tasksnum
	    move.l  d0,0(a0)
	    move.l  #1,4(a0)
	    bra.s   swgo

dosbase     dc.l    0
intuibase   dc.l    0
gfxbase     dc.l    0
window	    dc.l    0
parmtxt     dc.l    0
fileptr     dc.l    0
conmsg	    dc.l    0
ptr	    dc.l    0
oldidl	    dc.l    0
olddisp     dc.l    0
myseg	    dc.l    0
mysignal    dc.l    0
iostatus    dc.l    -1
devstatus   dc.l    -1
cancelbit   dc.l    0
cancelbnum  dc.l    0
_SysBase    dc.l    0
InputMsg    dc.l    0
InRequest   dc.l    0
startmess   dc.l    0
savedat     dc.l    0
mytask	    dc.l    0
wbmsg	    dc.l    0
pointer     dc.l    0
replyport   dc.l    0
finfoptr    dc.l    0
dispatches  dc.l    0
maxdisp     dc.l    0
wbaddr	    dc.l    0
remembr     dc.l    0
remembr2    dc.l    0
captask     dc.l    0
snoopport   dc.l    0
tasksnum    dc.l    0

stplist     dc.l    lh_tail
lh_tail     dc.l    0
	    dc.l    stplist
	    dc.b    1
	    dc.b    0

InInterrupt dc.l    0		;ln_Succ
	    dc.l    0		;ln_Pred
	    dc.b    2		;ln_Type
	    dc.b    60		;ln_Pri
	    dc.l    0		;ln_Name
	    dc.l    0		;is_Data
	    dc.l    Keyhandler	;is_Code()

window_l    dc.w    0
window_t    dc.w    0
window_w    dc.w    550
window_h    dc.w    200

binarea     dc.b    '         ',0
	    EVEN
minus	    dc.b    '  '
dezimal     dc.b    '   '
blnk	    dc.b    ' ',0
entries     dc.b    0
timeout     dc.b    5
procnum     dc.b    0
running     dc.b    0
newpri	    dc.b    0
tasktyp     dc.b    0
background  dc.b    0
bool	    dc.b    0
printed     dc.b    0
cbreak	    dc.b    0
rows	    dc.b    0
row	    dc.b    0
usageflag   dc.b    0
morefl	    dc.b    1
mnflag	    dc.b    1
tports	    dc.b    1
params	    dc.b    'tsdlrempi'
parmnum     equ     *-params
t2header    dc.b    '  ID    STATE   SIGALLOC SIGWAIT  SIGRECVD   PC   TASKNAME',0
theader     dc.b    '  ID    TYPE      STATE    PRI  CPUSE NUM TASKNAME',0
lheader     dc.b    ' NODE  CNT VER REV  FLAGS   ',0
libnam	    dc.b    'LIBRARY NAME',0
devnam	    dc.b    'DEVICE NAME',0
resnam	    dc.b    'RESOURCE NAME',0
mheader     dc.b    'LOWER  UPPER   FREE  ATTR  PRI HUNK NAME',0
nxtline     dc.b    $9b,'K'
cr	    dc.b    10,0
iheader     dc.b    ' NODE   DATA   CODE   PRI   TYPE     INTERRUPT NAME',0
rheader     dc.b    ' ADDR   PRI  FLAGS   VER   TYPE    RESIDENT NAME',0
pheader     dc.b    ' NODE  PORTNAME        FLAGS SIGBT NUM SIGTASK',0
hunkheader  dc.b    ' BCPL   DATA  LENGTH',0
ddheader    dc.b    'DEVICE   HDS SECTORS  TRACKS BUFFERS STATE    HANDLER',0
cdheader    dc.b    'PROCESSNAME    CURRENT DIRECTORY',0
ofheader    dc.b    ' LOCK  ACCESS  SIZE   PATH/FILENAME',0
scrheader   dc.b    'NUM  ADDR  TITLE',0
fohead	    dc.b    ' NODE  CNT  Y   X  TYPE  LO  HI NAME',0
kickhead    dc.b    'START  END    LENGTH',0
snoophead   dc.b    'ACTION REQUIREMENTS       LENGTH FROM   TO     CALLER',0
access	    dc.b    ' Read  ',0
	    dc.b    ' Write ',0
romfnt	    dc.b    'Rom  ',0
diskfnt     dc.b    'Disk ',0
wbname	    dc.b    'Workbench',0
status	    dc.b    'Added    ',0
	    dc.b    'Running  ',0
	    dc.b    'Ready    ',0
	    dc.b    'Waiting  ',0
	    dc.b    'Exeption ',0
	    dc.b    'Removed  ',0
	    dc.b    'Freezed  ',0
	    dc.b    'Freezed  ',0
type	    dc.b    'Unknown   ',0
	    dc.b    'Task      ',0
	    dc.b    'Interrupt ',0
	    dc.b    'Device    ',0
	    dc.b    'Msgport   ',0
	    dc.b    'Message   ',0
	    dc.b    'Freemsg   ',0
	    dc.b    'Replymsg  ',0
	    dc.b    'Resource  ',0
	    dc.b    'Library   ',0
	    dc.b    'Memory    ',0
	    dc.b    'Softint   ',0
	    dc.b    'Font      ',0
	    dc.b    'Process   ',0
	    dc.b    'Semaphore ',0
mp_flags    dc.b    'Signal  ',0
	    dc.b    'Softint ',0
	    dc.b    'Ignore  ',0
windowname  dc.b    'Xoper V1.2  ) 1988 Werner Gunther',0
newname     dc.b    '-Xoper-',0
memportname dc.b    'MemSnoop',0

cmdnum	    set      0
commds	    ADDCMD  'time'
	    ADDCMD  'taskpri'
	    ADDCMD  'info'
	    ADDCMD  'pri'
	    ADDCMD  'flush'
	    ADDCMD  'freeze'
	    ADDCMD  'warm'
	    ADDCMD  'signal'
	    ADDCMD  'break'
	    ADDCMD  'alert'
	    ADDCMD  'lastalert'
	    ADDCMD  'hold'
	    ADDCMD  'exit'
	    ADDCMD  'clear'
	    ADDCMD  'cancel'
	    ADDCMD  'more'
	    ADDCMD  'taskports'
	    ADDCMD  'hunks'
	    ADDCMD  'devices'
	    ADDCMD  'openlib'
	    ADDCMD  'closelib'
	    ADDCMD  'currentdir'
	    ADDCMD  'cd'
	    ADDCMD  'mypri'
	    ADDCMD  'files'
	    ADDCMD  'locks'
	    ADDCMD  'unlock'
	    ADDCMD  'screens'
	    ADDCMD  'windows'
	    ADDCMD  'closescreen'
	    ADDCMD  'closewindow'
	    ADDCMD  'fonts'
	    ADDCMD  'windowfonts'
	    ADDCMD  'lockdrive'
	    ADDCMD  'freedrive'
	    ADDCMD  'capture'
	    ADDCMD  'clrcold'
	    ADDCMD  'clrcool'
	    ADDCMD  'clrwarm'
	    ADDCMD  'snoop'
	    ADDCMD  'usage'
hex8area    dc.b    '  '
hexarea     dc.b    '       ',0
hextab	    dc.b    '0123456789abcdef'
infoh2	    dc.b    'Dispatches:',0
infoh1	    dc.b    'CPU:',0
infoh3	    dc.b    'CPU activity: ',0
infoh6	    dc.b    'Total:',0
infoh4	    dc.b    '% ',0
cpu0	    dc.b    '68000',0
cpu1	    dc.b    '68010',0
cpu2	    dc.b    '68020',0
cpu3	    dc.b    '/68881',0
syst	    dc.b    'DF0:',0
devload     dc.b    'loaded   ',0
devnload    dc.b    'unloaded ',0
prompt	    dc.b    $9b,'J','->',$9b,$20,$70
cls	    dc.b    $9b,'0 ',$70,$9b,'H'
getwin	    dc.b    $9b,$30,$20,$71
thisline    dc.b    $9b,$46,$9b,$4b
notfile     dc.b    '--- ------- ------- ------- ',0
ganzlongnix dc.b    '-'
longnix     dc.b    '----'
nix	    dc.b    '--- ',0
noinfo	    dc.b    'No Info on ',0
namerr	    dc.b    'Unable to find ',0
adrerr	    dc.b    'Address Error!',10,0
noderr	    dc.b    'Can`t find this Node. Continue ? (Y/N)',0
listerr     dc.b    'Unable to find ListHeader. Sort aborted.',0
noguru	    dc.b    'No Alert, shall I produce one ?',0
gurutxt     dc.b    'Guru Meditation #',0
clrtxt	    dc.b    'Memory Hunks cleared.',0
canerr0     dc.b    'Process is not a CLI-task',10
	    dc.b    'Has it been started from Workbench ? (Y/N)',10,0
canerr1     dc.b    'Process was created by CreateProc()',10
	    dc.b    'Shall I UnLoad() ? (Y/N)',10,0
unloaderr   dc.b    'Arrrgh.. can`t find segments, aborting',0
noprocs     dc.b    'Not a Process.',0
notload     dc.b    'No program loaded.',0
cliprocs    dc.b    'Cli-Process',0
procloaded  dc.b    'Loaded as a command: ',0
segloaded   dc.b    'Created by CreateProc()',0
coldtxt     dc.b    'Cold Capture: ',0
cooltxt     dc.b    'Cool Capture: ',0
warmtxt     dc.b    'Warm Capture: ',0
kicktxt     dc.b    'KickMem     : ',0
unset	    dc.b    'unset',0
intnames    dc.b    'Serial Out ',0
	    dc.b    'Disk Block ',0
	    dc.b    'SoftInt    ',0
	    dc.b    'CIAA       ',0
	    dc.b    'Copper     ',0
	    dc.b    'VBeam      ',0
	    dc.b    'Blitter    ',0
	    dc.b    'Audio Ch.0 ',0
	    dc.b    'Audio Ch.1 ',0
	    dc.b    'Audio Ch.2 ',0
	    dc.b    'Audio Ch.3 ',0
	    dc.b    'Serial In  ',0
	    dc.b    'Disk Sync  ',0
	    dc.b    'CIAB       ',0
	    dc.b    'SoftInt    ',0
	    dc.b    'NMI        ',0
inttyp	    dc.b    0,0,1,1,1,1,0,0,0,0,0,0,0,1,1,1
devicenam   dc.b    'input.device',0
memlarg     dc.b    'LARGEST ',0
memclr	    dc.b    'CLEAR ',0
memfast     dc.b    'FAST ',0
memchip     dc.b    'CHIP ',0
mempubl     dc.b    'PUBLIC ',0
failed	    dc.b    'Failed !',0
allok	    dc.b    'ALLOC: ',0
free	    dc.b    'FREE: ',0

synerr	    dc.b    'Syntax Error, type "?" for help',10,0
more	    dc.b    '<MORE>'
waittxt     dc.b    '<RETURN>',$9b,$4a
wberr	    dc.b    'Can`t examine Workbench locks',0
dnotf	    dc.b    'Directory not found',0
notdir	    dc.b    'Not a directory',0
nomount     dc.b    ' not mounted.',0
dishelp     dc.b    10,'Names are case sensitive and followd by a ":"',0
unlerr	    dc.b    'Lock not found',0
unl1	    dc.b    'Lock is on ',0
unltxt	    dc.b    'Old lock was: ',0
unltxt2     dc.b    'Unlock ? (Y/N)',10,0
scnofound   dc.b    'Screen not found.',0
winnofound  dc.b    'Window not found.',0
stperr	    dc.b    'Task must be "READY" or "WAITING"',10,0
waerr	    dc.b    'Task must be "FREEZED"',10,0
onscr	    dc.b    'On Screen: ',0
usetxt	    dc.b    $9b,'1mUSAGE:',$9b,'0m Xoper [T] [S] [L] [D] [R] [E] [M] [P] [I]',$9b,'K',10
	    dc.b    'OR     Xoper -b',$9b,'K',10
	    dc.b    $9b,'1mDISPLAY:',$9b,'0m',$9b,'K',10
	    dc.b    '[T]asks [S]=taskstate [L]ibraries [D]evices [R]esources',$9b,'K',10
	    dc.b    'r[E]sident [M]emory [P]orts [I]nterrupts [Q]uit',$9b,'K',10
	    dc.b    $9b,'1mCOMMANDS:',$9b,'0m',$9b,'K',10
	    dc.b    'Time         <secs>',$9b,'K',10
	    dc.b    'Taskpri      <priority>  [processnum] <taskname>',$9b,'K',10
	    dc.b    'Mypri        <priority>',$9b,'K',10
	    dc.b    'Signal       <mask(hex)> [processnum] <taskname>',$9b,'K',10
	    dc.b    'Break        [processnum] <taskname>',$9b,'K',10
	    dc.b    'Freeze|Warm  [processnum] <taskname>',$9b,'K',10
	    dc.b    'Cancel       [processnum] <taskname>',$9b,'K',10
	    dc.b    'Snoop        [processnum] <taskname>',$9b,'K',10
	    dc.b    'Pri          <priority> <nodename>',$9b,'K',10
	    dc.b    'Info         <name>',$9b,'K',10
	    dc.b    'Clear        <longword(hex)>',$9b,'K',10
	    dc.b    'Hunks        [processnum] <procname>',$9b,'K',10
	    dc.b    'CD           <directory> [processnum] <procname>',$9b,'K',10
	    dc.b    'Unlock       <lock>',$9b,'K',10
	    dc.b    'Openlib    | Closelib <libraryname>',$9b,'K',10
	    dc.b    'Closewindow| Closescreen <title>',$9b,'K',10
	    dc.b    'Lockdrive  | Freedrive   <DFn:>',$9b,'K',10
	    dc.b    'Flush,Devices,Currentdir,Files,Locks,Lastalert,More',$9b,'K',10
	    dc.b    'Taskports,Windows,Screens,Fonts,Windowfonts,Capture',$9b,'K',10
	    dc.b    'ClrCool,ClrCold,ClrWarm,Usage,Hold,Exit',$9b,'K',10
null	    dc.b    0

    IFD DEBUG
dosname     dc.b    'dos.library',0
intuiname   dc.b    'intuition.library',0
gfxname     dc.b    'graphics.library',0
	    EVEN
    ENDC

	    BSS     blabla
buffer	    ds.b    256
fname	    ds.b    284
out	    ds.b    80
dummy	    ds.b    80
in	    ds.b    80
cputime     ds.b    400

mypacket    BSS     standardpacket

LN_SUCC     ds.l    1
LN_PRED     ds.l    1
LN_TYPE     ds.b    1
LN_PRI	    ds.b    1
LN_NAME     ds.l    1
MP_FLAGS    ds.b    1
MP_SIGBIT   ds.b    1
MP_SIGTASK  ds.l    1
MN_SIZE     ds.w    1
LH_HEAD     ds.l    1
LH_TAIL     ds.l    1
LH_TAILPRED ds.l    1
LH_TYPE     ds.b    1
LH_pad	    ds.b    1
dp_Link     ds.l    1
dp_Port     ds.l    1
dp_Type     ds.l    1
dp_Res1     ds.l    1
dp_Res2     ds.l    1
dp_Arg1     ds.l    1
dp_Arg2     ds.l    1
dp_Arg3     ds.l    1
dp_Arg4     ds.l    1
dp_Arg5     ds.l    1
dp_Arg6     ds.l    1
dp_Arg7     ds.l    1
	    END

