home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 066.lha / TCB.asm < prev    next >
Assembly Source File  |  1986-11-20  |  41KB  |  1,150 lines

  1.  
  2. *************************************
  3. *    ASSEMBLY PROGRAM:  TCB.asm     *
  4. *     15 July 1987,  Al Aburto      *
  5. *                                   *
  6. *   Scans Amiga Task Control Block  *
  7. *   Structures and DOS SegLists.    *
  8. *************************************
  9.  
  10.    INCLUDE  "exec/types.i"
  11.    INCLUDE  "exec/execbase.i"
  12.    INCLUDE  "exec/nodes.i"
  13.    INCLUDE  "exec/memory.i"
  14.    INCLUDE  "libraries/dos.i"
  15.    INCLUDE  "libraries/dosextens.i"
  16.  
  17.    XREF     _AbsExecBase
  18.    XREF     _LVOOpenLibrary
  19.    XREF     _LVOCloseLibrary
  20.    XREF     _LVOFindTask
  21.    XREF     _LVOForbid
  22.    XREF     _LVOPermit
  23.  
  24.    XREF     _LVOInput
  25.    XREF     _LVOOutput
  26.    XREF     _LVOClose
  27.  
  28.    XREF     _printf                    ;Routine defined in amiga.lib
  29.  
  30. *********************** Exported Parameters ****************************
  31.  
  32.    XDEF     _DOSBase                   ;Define For amiga.lib Routines.
  33.    XDEF     _stdin
  34.    XDEF     _stdout
  35.    XDEF     _stderr
  36.  
  37. *********************** Main Entry Point ********************************
  38. _main:
  39.             MOVE.L   A7,DOS_SP            ;Save Stack Pointer.
  40.             MOVE.L   A0,DOSCmdBuf         ;CLI Command Buffer Address.
  41.             CLR.B    -$01(A0,D0)          ;Null Terminate CLI Command
  42.                                           ;Argument String.
  43.             BSR      Remove_Trailing_Spaces
  44.             MOVE.L   D0,DOSCmdLen         ;CLI Command Length.
  45.  
  46.             SUBA.L   A1,A1                ;Find And Initialize Our Task.
  47.             MOVEA.L  _AbsExecBase,A6
  48.             JSR      _LVOFindTask(A6)
  49.             MOVE.L   D0,MyTaskCB          ;Our Task Control Block Pointer
  50.             MOVEA.L  D0,A0                ;Set Name Of This Task (TCB).
  51.             MOVE.L   #MyTaskName,LN_NAME(A0)
  52.  
  53.             BSR      OpenDOS              ;Open AmigaDOS
  54.             BEQ      QuitA
  55.  
  56.             BSR      GetStdIO             ;Set Standard IO
  57.             BEQ      QuitB
  58.  
  59.             MOVEA.L  DOSCmdBuf,A1         ;Pointer To CLI Command String.
  60.             TST.B    (A1)                 ;No Argument If NULL.
  61.             BEQ      Task_List            ;Print Out Task Status List Then.
  62.                                           ;'TCB<cr>' Was Input.
  63.  
  64.             CMPI.W   #$3F00,(A1)          ;'TCB ?<cr>' Input?
  65.             BEQ      Command_Formats      ;Yes--- Print Command Formats.
  66.  
  67.             CMPI.W   #$5420,(A1)          ;'TCB T TaskName<cr>' Input?
  68.             BEQ      Dump_TCB             ;Yes--- Do Hex/ASCII Dump of TCB
  69.             CMPI.W   #$7420,(A1)
  70.             BEQ      Dump_TCB
  71.  
  72.             CMPI.W   #$4320,(A1)          ;'TCB C TaskName<cr>' Input?
  73.             BEQ      Dump_CLI             ;Yes--- Do Hex/ASCII Dump of CLI
  74.             CMPI.W   #$6320,(A1)
  75.             BEQ      Dump_CLI
  76.  
  77.             CMPI.W   #$4420,(A1)          ;'TCB D HexAddress<cr>' Input?
  78.             BEQ      Dump_Page            ;Yes--- Do Hex/ASCII Dump.
  79.             CMPI.W   #$6420,(A1)
  80.             BEQ      Dump_Page
  81.  
  82.             CMPI.W   #$4220,(A1)          ;'TCB B BPTR<cr>' Input?
  83.             BEQ      Convert_BPTR         ;Yes--- Convert BPTR To PTR
  84.             CMPI.W   #$6220,(A1)
  85.             BEQ      Convert_BPTR
  86.  
  87.             CMPI.W   #$4453,(A1)          ;'TCB DS<cr>' Input?
  88.             BEQ      DOS_Structures       ;Yes--- Do Hex/ASCII Dump From
  89.                                           ;   --- DOSLibrary Base Address.
  90.             CMPI.W   #$6473,(A1)
  91.             BEQ      DOS_Structures
  92.  
  93.             CMPI.W   #$444C,(A1)          ;'TCB DL<cr>' Input?
  94.             BEQ      Scan_DevList         ;Yes--- Print DOS DevList Info.
  95.             CMPI.W   #$646C,(A1)
  96.             BEQ      Scan_DevList
  97.  
  98.             CMPI.W   #$4C00,(A1)          ;'TCB L<cr>' Input?
  99.             BEQ      Scan_Libraries       ;Yes--- Print Exec Library Info.
  100.             CMPI.W   #$6C00,(A1)
  101.             BEQ      Scan_Libraries
  102.  
  103.             CMPI.W   #$4400,(A1)          ;'TCB D<cr>' Input?
  104.             BEQ      Scan_Devices         ;Yes--- Print Device Lib Info.
  105.             CMPI.W   #$6400,(A1)
  106.             BEQ      Scan_Devices
  107.  
  108.             CMPI.W   #$5320,(A1)          ;'TCB S SegListAddress' Input?
  109.             BEQ      SegList_Address      ;Yes--- Print SegList.
  110.             CMPI.W   #$7320,(A1)
  111.             BEQ      SegList_Address
  112.                                           ;No --- Then Assume
  113.                                           ;   --- 'TCB TaskName<cr>' Input.
  114.  
  115. ************************ TaskStatus TaskName ******************************
  116. *** Print Start Address and Size Of All TaskName Code/Data Segments.
  117. *** Task Info Also Printed.  Task Must Be a Process.
  118. ***
  119. TaskName_Input:
  120.             MOVE.L   A1,TaskNamePtr
  121.             JSR      _LVOFindTask(A6)     ;A1 Points To TaskName Input.
  122.             TST.L    D0
  123.             BEQ      TNIAE                ;Can't Find Exec Task--Check CLI.
  124.             MOVE.L   D0,TaskPointer       ;Pointer (Address) To Task
  125.                                           ;Control Block Structure.
  126. TNIAA:      MOVEA.L  TaskPointer,A1
  127.             CMPI.B   #$0D,LN_TYPE(A1)     ;Is It A Process?
  128.             BNE      Dump_CLI_Error       ;No! --- Exit Then.
  129.  
  130.             PEA.L    PrtHdr02             ;Print Header Info
  131.             JSR      _printf
  132.             ADDQ.L   #$04,A7
  133.  
  134.             BSR      MTForbid
  135.             BSR      TaskInfo             ;Print Task Info
  136.             BSR      MTPermit
  137.  
  138. Scan_SegList:
  139.             TST.L    Error_Flag           ;Check For SegList Error.
  140.             BNE      SegList_Error
  141.  
  142.             PEA.L    PrtFmtA              ;Print Header For Segment List.
  143.             JSR      _printf
  144.             ADDQ.L   #$04,A7
  145.  
  146.             MOVEQ.L  #$03,D0              ;Setup To Do Hex/ASCII Dump Too.
  147.             MOVE.L   D0,NumLWords
  148.             LEA.L    PrtFmtBA,A1
  149.             MOVE.L   A1,ASC_Buffer        ;Where We Put The ASCII Hex Data
  150.             LEA.L    PrtFmtBB,A1
  151.             MOVE.L   A1,PRT_Buffer        ;Where We Put The ASCII Data
  152.             MOVE.L   #$000C,NumChar       ;Only 12 Hex and ASCII Characters.
  153.             CLR.L    Save_Reg
  154.  
  155.             BSR      MTForbid             ;Forbid Any NEW Multitasking.
  156. TNIAC:      ADDQ.L   #$01,Save_Reg
  157.             MOVE.L   CodeAddress,Hex_Buffer
  158.             BSR      FilterByte           ;ASCII Data For Start Of Segment
  159.             BSR      BinHex               ;Hex   Data For Start Of Segment
  160.  
  161.             MOVE.L   CodeSize,-(A7)       ;Code Size.
  162.             MOVE.L   CodeAddress,-(A7)    ;Code Address.
  163.             MOVE.L   Save_Reg,-(A7)       ;Segment Number.
  164.             PEA.L    PrtFmtB
  165.             JSR      _printf
  166.             LEA.L    $10(A7),A7
  167.  
  168.             TST.L    NextSegment          ;Is The Next Segment NULL?
  169.             BEQ      TNIAD                ;Yes --- Quit Then.
  170.             MOVE.L   NextSegment,SegLAddress
  171.             BSR      First_Code
  172.             BRA      TNIAC                ;Do It Again Until We Print All
  173.                                           ;Segment Locations And Size.
  174. TNIAD:      BSR      MTPermit
  175.             BRA      QuitC
  176.  
  177. TNIAE:      BSR      CLI_TaskArray
  178.             TST.L    Error_Flag
  179.             BEQ      TNIAA
  180.             BRA      Task_Not_Found
  181.  
  182. ********************* Scan SegList Given Initial Address ****************
  183. *** Requires First SegList Address.
  184.  
  185. SegList_Address:
  186.             LEA.L    $02(A1),A1           ;Get SegList Start Address.
  187.             MOVE.L   A1,ASC_Buffer
  188.             BSR      HexBin               ;Convert ASCII Hex To Hex
  189.             MOVE.L   Save_Reg,SegLAddress ;The Input SegList Address(Hex)
  190.             BSR      First_Code           ;Get Segment Info
  191.             BRA      Scan_SegList         ;Ok --- Go Scan The Rest.
  192.  
  193. ********************* SegList Error Detected! ***************************
  194. SegList_Error:
  195.             MOVE.L   Error_Addr,-(A7)     ;Print Error Message.
  196.             PEA.L    PrtFmtF
  197.             JSR      _printf
  198.             LEA.L    $08(A7),A7
  199.             MOVE.L   Error_Addr,Save_Reg
  200.             BRA      Dump_PageA           ;Do Hex/ASCII Dump At Error
  201.                                           ;Address.
  202.  
  203. ********************* Task Not Found Message ****************************
  204. Task_Not_Found:
  205.             PEA.L    PrtNoTask
  206.             JSR      _printf
  207.             ADDQ.L   #$04,A7
  208.             BRA      QuitC
  209.  
  210. ******************** Command Formats List *******************************
  211. Command_Formats:
  212.             PEA.L    CmdFormatA           ;Need 4 _printf's As _printf
  213.             JSR      _printf              ;will Crash System If String To
  214.             ADDQ.L   #$04,A7              ;Print Is Too Big. 180 Characters
  215.                                           ;appears to be max.
  216.             PEA.L    CmdFormatB
  217.             JSR      _printf
  218.             ADDQ.L   #$04,A7
  219.  
  220.             PEA.L    CmdFormatC
  221.             JSR      _printf
  222.             ADDQ.L   #$04,A7
  223.  
  224.             PEA.L    CmdFormatD
  225.             JSR      _printf
  226.             ADDQ.L   #$04,A7
  227.  
  228.             BRA      QuitC
  229.  
  230. ******************** Convert BPTR To PTR (68000 Address) ****************
  231. Convert_BPTR:
  232.             LEA.L    $02(A1),A1           ;Get Input BPTR.
  233.             MOVE.L   A1,ASC_Buffer
  234.             BSR      HexBin
  235.             MOVE.L   Save_Reg,D0
  236.             MOVE.L   D0,D1
  237.             LSL.L    #$02,D1              ;Convert To APTR.
  238.  
  239.             MOVE.L   D1,-(A7)             ;Print Results.
  240.             MOVE.L   D0,-(A7)
  241.             PEA.L    PrtFmtE
  242.             JSR      _printf
  243.             LEA.L    $0C(A7),A7
  244.             BRA      QuitC
  245.  
  246. ******************** Dump Hex/ASCII Data From Input Address *************
  247. Dump_Page:
  248.             LEA.L    $02(A1),A1           ;Get Dump Address.
  249.             MOVE.L   A1,ASC_Buffer
  250.             BSR      HexBin               ;Convert ASCII Hex To Hex.
  251. Dump_PageA: MOVE.L   Save_Reg,Hex_Buffer  ;Where We Start The Dump.
  252.             MOVE.L   Save_Reg,StartAddr   ;Use This As Hex_Buffer Varies.
  253.             BRA      Dump_Hex_ASCII       ;Go Do It.
  254.  
  255. ******************** Dump Hex/ASCII Data From TCB Address ***************
  256. Dump_TCB:
  257.             LEA.L    $02(A1),A1           ;Get Input TaskName Strg Address.
  258.             MOVE.L   A1,TaskNamePtr
  259.             JSR      _LVOFindTask(A6)     ;Check For Match In Exec Tasks.
  260.             TST.L    D0
  261.             BEQ      DTCBB                ;Exec Task Not Found. Check CLI.
  262.             MOVE.L   D0,TaskPointer
  263.  
  264. DTCBA:      MOVE.L   TaskPointer,Hex_Buffer
  265.             CLR.L    StartAddr
  266.  
  267.             MOVE.L   TaskPointer,-(A7)    ;Print Header Info.
  268.             PEA.L    PrtFmtD04
  269.             JSR      _printf
  270.             ADDQ.L   #$08,A7
  271.             BRA      Dump_Hex_ASCII       ;Go Do The Hex/ASCII Dump.
  272.  
  273. DTCBB:      BSR      CLI_TaskArray        ;Check For CLI Tasks.
  274.             TST.L    Error_Flag
  275.             BEQ      DTCBA                ;CLI Task Found.
  276.             BRA      Task_Not_Found
  277.  
  278. ******************** Dump DOS Structures ********************************
  279. DOS_Structures:
  280.             PEA.L    PrtFmtG01            ;Print Header
  281.             JSR      _printf
  282.             ADDQ.L   #$04,A7
  283.  
  284.             MOVEA.L  _DOSBase,A0          ;DosLibrary Node Base Address.
  285.             MOVEA.L  LIB_SIZE(A0),A1      ;RootNode Structure Address.
  286.             MOVE.L   A1,Save_Reg
  287.             MOVE.L   (A1),D0              ;rn_TaskArray BPTR.
  288.             LSL.L    #$02,D0              ;rn_TaskArray APTR.
  289.  
  290.             MOVE.L   D0,-(A7)             ;Print It.
  291.             MOVE.L   A1,-(A7)
  292.             MOVE.L   A0,-(A7)
  293.             PEA.L    PrtFmtG02
  294.             JSR      _printf
  295.             LEA.L    $10(A7),A7
  296.  
  297.             MOVEA.L  Save_Reg,A0
  298.             MOVE.L   rn_Info(A0),D0       ;DevInfo Structure Address.
  299.             LSL.L    #$02,D0
  300.             MOVEA.L  D0,A0
  301.             MOVE.L   $04(A0),D0           ;DevList Structure Address.
  302.             LSL.L    #$02,D0
  303.  
  304.             MOVE.L   D0,-(A7)             ;Print It.
  305.             MOVE.L   A0,-(A7)
  306.             PEA.L    PrtFmtG03
  307.             JSR      _printf
  308.             LEA.L    $0C(A7),A7
  309.  
  310.             BRA      QuitC
  311.  
  312. ******************** Scan DOS DevList Structures ************************
  313. Scan_DevList:
  314.             PEA.L    PrtFmtH01
  315.             JSR      _printf
  316.             ADDQ.L   #$04,A7
  317.  
  318.             MOVEA.L  _DOSBase,A0
  319.             MOVEA.L  dl_Root(A0),A0
  320.             MOVE.L   rn_Info(A0),D0
  321.             LSL.L    #$02,D0
  322.             MOVEA.L  D0,A0
  323.             MOVE.L   di_DevInfo(A0),D0
  324.             LSL.L    #$02,D0
  325.             MOVEA.L  D0,A0                ;DevList Structure Address.
  326.  
  327. ScanDevL1:  MOVE.L   A0,Save_Reg
  328.  
  329.             MOVE.L   $28(A0),D0           ;DevList Structure Name.
  330.             LSL.L    #$02,D0
  331.             ADDQ.L   #$01,D0
  332.             MOVEA.L  D0,A4
  333.  
  334.             MOVE.L   $20(A0),D0           ;SegList
  335.             LSL.L    #$02,D0
  336.             MOVEA.L  D0,A3
  337.  
  338.             MOVEA.L  $08(A0),A2           ;DevList Type.
  339.             LEA.L    Dev_Type,A1
  340.             MOVE.L   $04(A0),D0
  341.             MOVE.L   D0,D1
  342.             MULU.W   #$000A,D0
  343.             ADDA.L   D0,A1
  344.  
  345.             CMPI.B   #$02,D1
  346.             BNE      ScanDevL2
  347.             SUBA.L   A3,A3
  348.  
  349. ScanDevL2:  MOVE.L   A4,-(A7)
  350.             MOVE.L   A3,-(A7)
  351.             MOVE.L   A2,-(A7)
  352.             MOVE.L   A1,-(A7)
  353.             MOVE.L   A0,-(A7)
  354.             PEA.L    PrtFmtH02
  355.             JSR      _printf
  356.             LEA.L    $18(A7),A7
  357.  
  358.             MOVEA.L  Save_Reg,A1
  359.             MOVE.L   (A1),D0
  360.             LSL.L    #$02,D0
  361.             MOVEA.L  D0,A0                ;Next DevList Structure Address.
  362.             TST.L    (A1)                 ;Quit On Null.
  363.             BNE      ScanDevL1            ;Go Print Next.
  364.             BRA      QuitC
  365.  
  366. ******************** Scan Amiga Library Structures **********************
  367. Scan_Libraries:
  368.             PEA.L    PrtFmtI01
  369.             JSR      _printf              ;Print Header.
  370.             ADDQ.L   #$04,A7
  371.  
  372.             MOVEA.L  _AbsExecBase,A6
  373.             MOVEA.L  LibList(A6),A0       ;Library List Structure Pointer.
  374.  
  375. ScanLiba:   MOVE.L   A0,Save_Reg          ;Save A0 as _printf Clobbers It.
  376.             TST.L    (A0)
  377.             BEQ      ScanLibd             ;End Of List --- Quit.
  378.  
  379.             MOVE.L   LIB_IDSTRING(A0),D0
  380.             BNE      ScanLibb
  381.             MOVE.L   #Default_Str,D0
  382.             BRA      ScanLibc
  383.  
  384. ScanLibb:   BSR      Null_Terminate
  385. ScanLibc:   MOVE.L   D0,-(A7)             ;D0 Contains LIB_IDSTRING Pointer.
  386.             MOVE.W   LIB_POSSIZE(A0),-(A7)
  387.             MOVE.W   LIB_NEGSIZE(A0),-(A7)
  388.             MOVE.L   LN_NAME(A0),-(A7)    ;Library Name.
  389.             MOVE.L   A0,-(A7)             ;Library Address.
  390.             PEA.L    PrtFmtI02            ;Print Format String.
  391.             JSR      _printf              ;Print Routine.
  392.             LEA.L    $14(A7),A7           ;Restore Stack Pointer.
  393.             MOVE.L   Save_Reg,A0
  394.             MOVE.L   (A0),A0              ;Get Next Node Pointer.
  395.             BRA      ScanLiba
  396.  
  397. ScanLibd:   BRA      QuitC
  398.  
  399. ******************** Scan Amiga Device Libraries ************************
  400. Scan_Devices:
  401.             PEA.L    PrtFmtI01
  402.             JSR      _printf
  403.             ADDQ.L   #$04,A7
  404.  
  405.             MOVEA.L  _AbsExecBase,A6
  406.             MOVEA.L  DeviceList(A6),A0
  407.             BRA      ScanLiba
  408.  
  409. ******************** General Hex/ASCII Dump Routine *********************
  410. Dump_Hex_ASCII:
  411.             MOVEQ.L  #$04,D0
  412.             MOVE.L   D0,NumLWords
  413.             LSL.L    #$02,D0
  414.             MOVE.L   D0,NumChar
  415.             MOVE.L   #$0010,NumRows
  416.             MOVEQ.L  #$00,D0
  417.             MOVE.L   StartAddr,D1
  418.  
  419.             LEA.L    PrtFmtCA,A0
  420.             MOVE.L   A0,ASC_Buffer
  421.             LEA.L    PrtFmtCB,A1
  422.             MOVE.L   A1,PRT_Buffer
  423.  
  424.             BSR      MTForbid
  425. DHALoop:    ADDQ.L   #$01,D0
  426.             BSR      FilterByte
  427.             BSR      BinHex
  428.  
  429.             MOVEM.L  D0/D1,-(A7)
  430.             MOVE.L   D1,-(A7)
  431.             PEA.L    PrtFmtC
  432.             JSR      _printf
  433.             ADDQ.L   #$08,A7
  434.             MOVEM.L  (A7)+,D0/D1
  435.  
  436.             ADD.L    NumChar,D1
  437.             CMP.L    NumRows,D0
  438.             BNE      DHALoop
  439.  
  440.             BSR      MTPermit
  441.             BRA      QuitC
  442.  
  443. ******************** Dump CommandLineInterface Structure *****************
  444. Dump_CLI:
  445.             LEA.L    $02(A1),A1           ;Input TaskName Pointer.
  446.             MOVE.L   A1,TaskNamePtr
  447.             JSR      _LVOFindTask(A6)
  448.             TST.L    D0
  449.             BEQ      DCLID                ;Check CLI Tasks Then
  450.             MOVE.L   D0,TaskPointer
  451.  
  452. DCLIA:      MOVEA.L  TaskPointer,A0
  453.             CMPI.B   #$0D,LN_TYPE(A0)     ;Is It A Process?
  454.             BNE      Dump_CLI_Error       ;Error --- Not A Process.
  455.  
  456. DCLIB:      MOVE.L   pr_CLI(A0),D0        ;BPTR To CLI Structure
  457.             TST.L    D0                   ;CLI ?
  458.             BEQ      DCLIC                ;No  --- Print Error.
  459.  
  460.             LSL.L    #$02,D0              ;APTR To CLI Structure
  461.             MOVE.L   D0,Hex_Buffer
  462.             CLR.L    StartAddr
  463.  
  464.             MOVE.L   D0,-(A7)             ;Print Header.
  465.             PEA.L    PrtFmtD01
  466.             JSR      _printf
  467.             ADDQ.L   #$08,A7
  468.             BRA      Dump_Hex_ASCII       ;Go Do The Hex/ASCII Dump.
  469.  
  470. DCLIC:      PEA.L    PrtFmtD03            ;Error --- Not CLI Process.
  471.             JSR      _printf
  472.             ADDQ.L   #$04,A7
  473.             BRA      QuitC
  474.  
  475. DCLID:      BSR      CLI_TaskArray        ;Check DOS CLI rn_TaskArray.
  476.             TST.L    Error_Flag
  477.             BEQ      DCLIA                ;Found DOS CLI Task.
  478.             BRA      Task_Not_Found
  479.  
  480. Dump_CLI_Error:
  481.             PEA.L    PrtFmtD02            ;Error --- Not a Process.
  482.             JSR      _printf
  483.             ADDQ.L   #$04,A7
  484.             BRA      QuitC
  485.  
  486. ******************** Print Out Info On All Current Tasks *****************
  487. Task_List:
  488.             PEA.L    PrtHdr01             ;Print Program Title.
  489.             JSR      _printf
  490.             ADDQ.L   #$04,A7
  491.  
  492.             PEA.L    PrtHdr03             ;Print Header For Output.
  493.             JSR      _printf
  494.             ADDQ.L   #$04,A7
  495.  
  496.             MOVEA.L  ThisTask(A6),A0      ;Pointer To Current Task Structure
  497.             MOVE.L   A0,TaskPointer
  498.  
  499.             BSR      MTForbid
  500.             MOVE.L   pr_CLI(A0),D0
  501.             TST.L    D0
  502.             BEQ      TL01                 ;Not CLI --- Skip The Rest As It
  503.                                           ;        --- Is Not Valid.
  504.             LSL.L    #$02,D0
  505.             MOVEA.L  D0,A1                ;CommandLineInterpreter Structure.
  506.             MOVE.L   cli_Module(A1),D0    ;Current Command SegList Pointer.
  507.             LSL.L    #$02,D0              ;Convert From BCPL
  508.             MOVEA.L  D0,A1                ;Pointer To SegList.
  509.             MOVE.L   A1,SegLAddress
  510.             MOVE.L   pr_SegList(A0),D0    ;BPTR To SegList Array
  511.             LSL.L    #$02,D0
  512.             MOVE.L   D0,SegListArray
  513.             BSR      First_Code
  514.             BSR      TaskInfoB
  515. TL01:
  516.  
  517. Tasks_Waiting:
  518.             MOVEA.L  TaskWait(A6),A0      ;Task Control Block Pointer Of
  519.             MOVE.L   A0,TaskPointer       ;Waiting Tasks.
  520.             BSR      TaskInfo
  521.             MOVEA.L  TaskPointer,A0
  522.             TST.L    (A0)                 ;Is Next Node Null?
  523.             BEQ      Tasks_Ready          ;Yes --- Done Then.
  524.  
  525.             CLR.L    Loop_Done
  526. TW01:       BSR      Get_Task
  527.             TST.L    Loop_Done            ;Loop Until We Get All Waiting
  528.             BEQ      TW01                 ;Tasks.
  529.  
  530. Tasks_Ready:
  531.             MOVEA.L  TaskReady(A6),A0     ;Check 'Ready' Tasks.
  532.             MOVE.L   A0,TaskPointer       ;Task Node Pointer.
  533.             BSR      TaskInfo             ;Print Info.
  534.             MOVEA.L  TaskPointer,A0       ;Get Current Task Pointer
  535.             TST.L    (A0)                 ;Is Next Node Null?
  536.             BEQ      TR02                 ;Yes --- Quit Then.
  537.  
  538.             CLR.L    Loop_Done
  539. TR01:       BSR      Get_Task
  540.             TST.L    Loop_Done
  541.             BEQ      TR01
  542. TR02:       BSR      MTPermit
  543.  
  544. QuitC:      ;I did Have an _LVOClose here but it resulted in System Crash!
  545.             ;I Dunno Why --- So I Removed That Code --- Works OK Now.
  546. QuitB:
  547.  
  548. ******************** End Of Program Run ***********************************
  549. QuitA:      CLR.L    D0                   ;End Of Program Run.
  550.             MOVEA.L  DOS_SP,A7
  551.             RTS
  552.  
  553. *<<<<<<<<<<<<<<<<<<<<<<<<< Subroutines >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*
  554.  
  555. *************** Check DOS CLI[n] TaskArray *****************************
  556. CLI_TaskArray:
  557.             CLR.L    Error_Flag
  558.             MOVEA.L  _DOSBase,A2
  559.             MOVEQ.L  #$00,D1              ;CLI Task Counter --- Preserve
  560.             MOVEA.L  dl_Root(A2),A2       ;RootNode Structure Address
  561.             MOVE.L   (A2),D0              ;rn_TaskArray (BPTR)
  562.             LSL.L    #$02,D0
  563.             MOVEA.L  D0,A2                ;rn_TaskArray Address
  564.             MOVE.L   (A2)+,D2             ;Max # Elements ----- Preserve
  565.             ADDQ.L   #$01,D2
  566.  
  567. CTA01:      TST.L    (A2)                 ;Null Pointer?
  568.             BEQ      CTA09                ;Yes --- Quit
  569.             MOVEA.L  (A2)+,A1             ;CLI[1] (APTR) --- Process-id
  570.             ADDQ.L   #$01,D1              ;Increment Task Count
  571.             CMP.L    D1,D2
  572.             BEQ      CTA09                ;Error --- Quit Then.
  573.  
  574.             LEA.L    -TC_SIZE(A1),A0
  575.             MOVE.L   A0,TaskPointer
  576.             CMPI.B   #$0D,LN_TYPE(A0)     ;Process?
  577.             BNE      CTA10                ;No  --- Quit
  578.             MOVE.L   pr_CLI(A0),D0
  579.             TST.L    D0                   ;CLI?
  580.             BEQ      CTA10                ;No  --- Quit.
  581.             LSL.L    #$02,D0
  582.             MOVEA.L  D0,A1                ;CommandLineInterface Structure
  583.             MOVE.L   cli_CommandName(A1),D0
  584.             LSL.L    #$02,D0
  585.             MOVEA.L  D0,A1                ;CLI TaskName Address (a BSTR)
  586.             MOVE.B   (A1)+,D0             ;Number Of Characters.
  587.             MOVEA.L  TaskNamePtr,A0       ;Input TaskName.
  588.             BSR      String_Cmp
  589.             TST.L    D0                   ;String Match?
  590.             BNE      CTA01                ;No  --- Check Next CLI Task.
  591.  
  592.             RTS
  593.  
  594. CTA09:      ADDQ.L   #$01,Error_Flag      ;Task_Not_Found
  595.             RTS
  596.  
  597. CTA10:      ADDQ.L   #$02,Error_Flag      ;Not a CLI Process
  598.             RTS
  599.  
  600. *************** Compare Memory *****************************************
  601. String_Cmp:
  602.             MOVEM.L  D1-D2/A0-A2,-(A7)
  603. Str_Cmp_Loop:
  604.             CMPM.B   (A0)+,(A1)+
  605.             BNE      Str_Cmp_False
  606.             SUBQ.L   #$01,D0
  607.             CMPI.B   #$01,D0
  608.             BNE      Str_Cmp_Loop
  609.             MOVEQ.L  #$00,D0
  610. Str_Cmp_Rts:
  611.             MOVEM.L  (A7)+,D1-D2/A0-A2
  612.             RTS
  613. Str_Cmp_False:
  614.             MOVEQ.L  #$01,D0
  615.             BRA      Str_Cmp_Rts
  616.  
  617. *************** Remove Trailing Spaces From String *********************
  618. Remove_Trailing_Spaces:
  619.             MOVEM.L  D1/A1,-(A7)
  620.             MOVEA.L  A0,A1                ;A0 --> Start Of String.
  621.             LEA.L    -$01(A0,D0),A1       ;D0 Is Length Of String.
  622.                                           ;A1 --> End   Of String
  623. RTS01:      CMPI.B   #$20,-(A1)           ;Space?
  624.             BNE      RTS02                ;No  --- Quit Then.
  625.  
  626.             SUBQ.L   #$01,D0              ;Reduce Length By One.
  627.             MOVE.B   #$00,(A1)            ;Null Terminate.
  628.             BRA      RTS01                ;Keep Checking.
  629.  
  630. RTS02:      MOVEM.L  (A7)+,D1/A1          ;D0 Contains Length Of New
  631.             RTS                           ;Null Terminated String.
  632.  
  633. *************** Null Terminate ASCII String ****************************
  634. Null_Terminate:
  635.             MOVEM.L  D1/A0/A1,-(A7)
  636.             MOVE.L   D0,A0                ;ASCII String Pointer.
  637.             MOVEA.L  #ASCIIBuff,A1
  638.             MOVE.L   A1,D0                ;Final String Location.
  639.  
  640. NullTerma:  MOVE.B   (A0)+,D1
  641.             CMPI.B   #$0D,D1              ;Quit If CR Found.
  642.             BEQ      NullTermb
  643.             CMPI.B   #$0A,D1              ;Quit If LF Found.
  644.             BEQ      NullTermb
  645.             CMPI.B   #$00,D1              ;Quit If NULL Found.
  646.             BEQ      NullTermb
  647.             MOVE.B   D1,(A1)+
  648.             BRA      NullTerma
  649.  
  650. NullTermb:  MOVE.B   #$00,(A1)+           ;NULL Terminate And Quit.
  651.             MOVE.B   #$00,(A1)+           ;D0 Holds New String Pointer
  652.             MOVEM.L  (A7)+,D1/A0/A1       ;Address.
  653.             RTS
  654.  
  655. *************** Filter Byte For Printing *******************************
  656.  
  657. FilterByte: MOVEM.L  D0-D2/A0-A1,-(A7)    ;Convert ASCII Control Codes
  658.             MOVEA.L  Hex_Buffer,A0        ;To '.' For ASCII Dump.
  659.             MOVEA.L  PRT_Buffer,A1
  660.             MOVE.L   NumChar,D2
  661.             MOVEQ.L  #$00,D1
  662.  
  663. FBLoop:     ADDQ.L   #$01,D1
  664.             MOVE.B   (A0)+,D0
  665.             CMPI.B   #$20,D0
  666.             BLT      SetPeriod
  667.             CMPI.B   #$7D,D0
  668.             BGT      SetPeriod
  669.             CMPI.B   #$25,D0
  670.             BEQ      SetSpecial
  671.  
  672. PrtOk:      MOVE.B   D0,(A1)+
  673.             CMP.L    D1,D2
  674.             BNE      FBLoop
  675.             MOVEM.L  (A7)+,D0-D2/A0-A1
  676.             RTS
  677.  
  678. SetPeriod:  MOVE.B   #$2E,D0
  679.             BRA      PrtOk
  680. SetSpecial: MOVE.B   #$B6,D0
  681.             BRA      PrtOk
  682.  
  683. *************** Convert ASCII Hex Character To Long Hex  ****************
  684. *** Only Input Required Is ASCII Hex String Address: ASC_Buffer
  685.  
  686. HexBin:     MOVEM.L  D0-D2/A0-A2,-(A7)
  687.             MOVEQ.L  #$00,D0
  688.             MOVEA.L  ASC_Buffer,A0        ;ASCII Hex String Address.
  689.  
  690. HBLoopA:    MOVEQ.L  #$00,D1
  691.             CMPI.B   #'9',(A0)            ;Is It > $39 ?
  692.             BHI      NotDec               ;Yes --- Check For A,B,C,D,E,F
  693.             CMPI.B   #'0',(A0)            ;Is It < $30 ?
  694.             BLT      NotHex               ;Yes --- Quit Then.
  695.             MOVE.B   #'0',D1
  696.             BRA      GotDigit             ;Must Be $30 Through $39 Then
  697.  
  698. NotDec:     CMPI.B   #'A',(A0)            ;Is It < $41 ?
  699.             BLT      NotHex               ;Yes --- Quit Then.
  700.             CMPI.B   #'F',(A0)            ;Is It > $46 ?
  701.             BHI      NotUC                ;Yes --- Check Lower Case Then.
  702.             MOVE.B   #'A'-10,D1
  703.             BRA      GotDigit             ;Must Be A,B,C,D,E, or F Then.
  704.  
  705. NotUC:      CMPI.B   #'a',(A0)
  706.             BLT      NotHex
  707.             CMPI.B   #'f',(A0)
  708.             BHI      NotHex
  709.             MOVE.B   #'a'-10,D1
  710.  
  711. GotDigit:   MOVEQ.L  #$00,D2
  712.             MOVE.B   (A0)+,D2
  713.             SUB.L    D1,D2
  714.             LSL.L    #$04,D0
  715.             ADD.L    D2,D0
  716.             BRA      HBLoopA
  717.  
  718. NotHex:     MOVE.L   D0,Save_Reg          ;Save_Reg Holds 4 Byte Result.
  719.             MOVEM.L  (A7)+,D0-D2/A0-A2
  720.             RTS
  721.  
  722. *************** Convert Nibble To ASCII Hex Character ******************
  723. *************** A2  =  Hex Buffer (4 Bytes)
  724. *************** A0 --> Output ASCII Hex Buffer (8 Bytes)
  725.  
  726. BinHex:     MOVEM.L  D0-D3/A0-A2,-(A7)
  727.             LEA.L    HexTable,A1
  728.             MOVEA.L  ASC_Buffer,A0
  729.             MOVEQ.L  #$00,D3
  730.             MOVEA.L  Hex_Buffer,A2
  731.  
  732. BHLoopA:    ADDA.L   #$0008,A0
  733.             MOVEQ.L  #$07,D1
  734.             ADDQ.L   #$01,D3
  735.             MOVE.L   (A2)+,D0
  736.  
  737. BHLoopB:    MOVE.L   D0,D2
  738.             ANDI.L   #$0000000F,D2
  739.             MOVE.B   $00(A1,D2.L),-(A0)
  740.             LSR.L    #$04,D0
  741.             DBRA     D1,BHLoopB
  742.  
  743.             LEA.L    $09(A0),A0
  744.             CMP.L    NumLWords,D3
  745.             BNE      BHLoopA
  746.  
  747.             MOVE.L   A2,Hex_Buffer
  748.             MOVEM.L  (A7)+,D0-D3/A0-A2
  749.             RTS
  750.  
  751. *************** Open DOS Library ***************************************
  752. OpenDOS:    LEA.L    DOSName,A1
  753.             MOVEA.L  _AbsExecBase,A6
  754.             MOVEQ.L  #$00,D0
  755.             JSR      _LVOOpenLibrary(A6)
  756.             MOVE.L   D0,_DOSBase
  757.             RTS
  758.  
  759. *************** Get Std IO File Handles ********************************
  760. GetStdIO:   MOVE.L   A6,-(A7)
  761.             MOVEA.L  _DOSBase,A6
  762.             JSR      _LVOInput(A6)
  763.             MOVE.L   D0,_stdin
  764.             BEQ      GSIORTS
  765.  
  766.             JSR      _LVOOutput(A6)
  767.             MOVE.L   D0,_stdout
  768.             MOVE.L   D0,_stderr
  769. GSIORTS:    MOVE.L   (A7)+,A6
  770.             TST.L    D0
  771.             RTS
  772.  
  773. *************** Get First Code Address Info ****************************
  774. *** Only Required Input Is The SegList Address Pointer (SegLAddress)
  775.  
  776. First_Code: MOVEM.L  D0-D1/A0-A1,-(A7)
  777.             CLR.L    Error_Flag
  778.             MOVE.L   SegLAddress,A1       ;Pointer To SegList Address
  779.             MOVE.L   (A1),D1              ;BPTR To Next Segment
  780.             CMPI.L   #$3FFFFFFF,D1        ;Max BPTR Exceeded?
  781.             BLE      FC01
  782.             MOVE.L   #$0001,Error_Flag
  783.             MOVE.L   A1,Error_Addr
  784.  
  785. FC01:       LSL.L    #$02,D1
  786.             MOVE.L   D1,NextSegment       ;Next Segment Address
  787.             MOVE.L   -$0004(A1),D0        ;Code Size Of First Segment
  788.             MOVE.L   D0,CodeSize
  789.             ADDQ.L   #$04,A1              ;First Segment Address.
  790.             MOVE.L   A1,CodeAddress
  791.             MOVEM.L  (A7)+,D0-D1/A0-A1
  792.             RTS
  793.  
  794. *************** Get Task Information ***********************************
  795. *** Updates Node TaskPointer And Prints Info On Updated Task
  796.  
  797. Get_Task:   MOVE.L   A0,-(A7)
  798.             MOVEA.L  TaskPointer,A0       ;Get Task Structure Pointer.
  799.             MOVEA.L  (A0),A0              ;For Next Task.
  800.             TST.L    (A0)                 ;Done If Its Contents Are NULL.
  801.             BEQ      GTExit
  802.  
  803.             MOVE.L   A0,TaskPointer       ;Save Current Task Structure Ptr.
  804.             BSR      TaskInfo             ;Print The Task Information.
  805.             MOVEA.L  (A7)+,A0
  806.             RTS
  807.  
  808. GTExit:     ADDQ.L   #$01,Loop_Done       ;Set Flag For Calling Routine.
  809.             MOVEA.L  (A7)+,A0
  810.             RTS
  811.  
  812. *************** Print Out Task Info *************************************
  813. *** Only Required Input Is The Current TaskPointer --- Dumps Info On That
  814.  
  815. TaskInfo:   MOVEA.L  TaskPointer,A0
  816.             CLR.L    SegLAddress
  817.             MOVE.L   $80(A0),D0           ;SegList Array BPTR
  818.             LSL.L    #$02,D0              ;Convert To Address
  819.             MOVE.L   D0,SegListArray      ;Save SegList Array Address.
  820.             ADD.L    #$000C,D0            ;Third Long Word Is User Code BPTR
  821.             MOVEA.L  D0,A1                ;Contents A1 Is SegList Address
  822.             MOVE.L   (A1),D0              ;In BCPL (Of Course!)
  823.             BEQ      TI02                 ;Oops!
  824.             LSL.L    #$02,D0
  825.             MOVE.L   D0,SegLAddress       ;SegList Start Address!
  826.             BSR      First_Code           ;Get The Code Address and Size
  827.  
  828.             CMPI.B   #$0D,$08(A0)         ;Is It A Process?
  829.             BEQ      TaskInfoB            ;Yes --- Go Print The Results.
  830.  
  831. TI01:       CLR.L    SegListArray         ;No  --- SegList Not Valid Then.
  832.             CLR.L    CodeAddress          ;    --- Start Address Not Valid.
  833.             BRA      TaskInfoB
  834.  
  835. TI02:       CMPI.B   #$0D,$08(A0)         ;Process?
  836.             BNE      TI01                 ;No  --- Forget The Rest Then.
  837.             MOVE.L   pr_CLI(A0),D0        ;Its Null --- Check cli_Module
  838.             TST.L    D0
  839.             BEQ      TI01                 ;Just Give Up!
  840.             LSL.L    #$02,D0
  841.             MOVEA.L  D0,A1
  842.             MOVE.L   cli_Module(A1),D0    ;BPTR To SegList
  843.             LSL.L    #$02,D0
  844.             MOVEA.L  D0,A1
  845.             MOVE.L   A1,SegLAddress       ;SegList
  846.             BSR      First_Code
  847.  
  848. TaskInfoB:  MOVE.L   SegListArray,-(A7)   ;SegList Array  Address.
  849.             MOVE.L   TaskPointer,-(A7)    ;Task Structure Address.
  850.  
  851.             CLR.L    D0
  852.             MOVE.B   $09(A0),D0           ;LN_PRI --- Task Priority.
  853.             EXT.W    D0
  854.             EXT.L    D0
  855.             MOVE.L   D0,-(A7)
  856.  
  857.             MOVEA.L  #PrtYes,A1
  858.             TST.L    pr_CLI(A0)           ;Was It Run From The CLI?
  859.             BNE      TI03                 ;Yes
  860.             MOVEA.L  #PrtNo,A1
  861.             BRA      TI04
  862.  
  863. TI03:       CMPI.B   #$0D,LN_TYPE(A0)     ;Set To 'No' If not a Process.
  864.             BEQ      TI04
  865.             MOVEA.L  #PrtNo,A1
  866.  
  867. TI04:       MOVE.L   A1,-(A7)             ;CLI Task --- Yes Or No Result.
  868.  
  869.             MOVEQ.L  #$00,D0
  870.             MOVE.B   $0F(A0),D0           ;TC_STATE
  871.             MULU.W   #$0008,D0
  872.             MOVEA.L  #Task_State,A1       ;Pointer To State String.
  873.             ADDA.L   D0,A1
  874.             MOVE.L   A1,-(A7)
  875.  
  876.             MOVEQ.L  #$00,D0
  877.             MOVE.B   $08(A0),D0           ;LN_TYPE
  878.             MULU.W   #$000A,D0
  879.             MOVEA.L  #NodeType,A1         ;Pointer To Type Of Task String.
  880.             ADDA.L   D0,A1
  881.             MOVE.L   A1,-(A7)             ;Task Type
  882.  
  883.             TST.B    $08(A0)              ;See If Node Type Is 'Unknown'!
  884.             BEQ      TI06                 ;Print Default Name If Node Type
  885.                                           ;is 'Unknown' To Prevent printing
  886.                                           ;Garbage String!
  887.  
  888.             MOVEA.L  LN_NAME(A0),A1       ;Exec Task NodeName Pointer.
  889.             CMPI.B   #$0D,LN_TYPE(A0)     ;Process?
  890.             BNE      TI05                 ;No! --- Use LN_NAME.
  891.             MOVE.L   pr_CLI(A0),D0        ;Yes
  892.             TST.L    D0                   ;CLI?
  893.             BEQ      TI05                 ;No! --- Use LN_NAME.
  894.             LSL.L    #$02,D0              ;Its A Process Run From CLI Here.
  895.             MOVEA.L  D0,A2                ;For Process use CLI CommandName.
  896.             MOVE.L   cli_CommandName(A2),D0
  897.             TST.L    D0
  898.             BEQ      TI05
  899.             LSL.L    #$02,D0              ;BSTR Address (Now an APTR)
  900.             ADDQ.L   #$01,D0              ;Skip BSTR Size Byte!
  901.             BSR      Null_Terminate
  902.             MOVEA.L  D0,A1                ;New CommandName String Location.
  903.  
  904. TI05:       TST.B    $0F(A0)              ;Task State Invalid?
  905.             BNE      TI07                 ;No  --- Branch Then.
  906. TI06:       MOVEA.L  #PrtNoName,A1        ;Yes --- Get Default String.
  907. TI07:       MOVE.L   A1,-(A7)
  908.  
  909.             PEA.L    PrtFmt
  910.             JSR      _printf
  911.             LEA      $20(A7),A7
  912. TI08:       RTS
  913.  
  914. *************** Forbid Multitasking *************************************
  915. MTForbid:   MOVE.L   A6,-(A7)
  916.             MOVEA.L  _AbsExecBase,A6
  917.             JSR      _LVOForbid(A6)
  918.             MOVEA.L  (A7)+,A6
  919.             RTS
  920.  
  921. *************** Permit MultiTasking *************************************
  922. MTPermit:   MOVE.L   A6,-(A7)
  923.             MOVEA.L  _AbsExecBase,A6
  924.             JSR      _LVOPermit(A6)
  925.             MOVEA.L  (A7)+,A6
  926.             RTS
  927.  
  928. *************** Data Storage ********************************************
  929.             SECTION  data,DATA
  930.  
  931.             CNOP  0,2
  932. MyTaskName  DC.B     'TCB',0
  933.  
  934.             CNOP  0,2
  935. DOSName     DC.B     'dos.library',0
  936.  
  937.             CNOP  0,2
  938. Default_Str DC.B     '*** ( No ID String ) ***',0
  939.  
  940.             CNOP  0,2
  941. PrtNoName   DC.B     '***( No Name )***',0
  942.  
  943.             CNOP  0,2
  944. PrtHdr01    DC.B     $0C,$9B,$33,$33,$6D
  945.             DC.B     '   ***************<<<'
  946.             DC.B     $9B,$37,$3B,$33,$31,$6D
  947.             DC.B     ' PD Program TCB, 15 Jul 1987,'
  948.             DC.B     ' By AAA '
  949.             DC.B     $9B,$30,$3B,$33,$33,$6D
  950.             DC.B     '>>>**************'
  951.             DC.B     $9B,$33,$31,$6D,$0A,$00
  952.  
  953.             CNOP  0,2
  954. PrtHdr02    DC.B     $0C
  955. PrtHdr03    DC.B     $9B,$33,$33,$6D
  956.             DC.B     '   Task Name           Task Type     State    CLI   '
  957.             DC.B     'PRI   Task CB  SegArray'
  958.             DC.B     $9B,$33,$31,$6D,$0A,$00
  959.  
  960.             CNOP  0,2
  961. PrtFmtA     DC.B     $9B,$33,$33,$6D
  962.             DC.B     '   <<<*********************************'
  963.             DC.B     '*********************************>>>',$0A
  964.             DC.B     $9B,$33,$31,$6D
  965.             DC.B     '   Process Segment List:',$0A
  966.             DC.B     '   Segment   Address      Size',$0A,$00
  967.  
  968.             CNOP  0,2
  969. PrtYes      DC.B     'Yes',0
  970.  
  971.             CNOP  0,2
  972. PrtNo       DC.B     'No ',0
  973.  
  974.             CNOP  0,2
  975. CmdFormatA: DC.B     $0A
  976.             DC.B     $9B,$33,$33,$6D
  977.             DC.B     '   Command Formats: '
  978.             DC.B     $9B,$33,$31,$6D,$0A
  979.             DC.B     '   TCB ?            ;This List',$0A
  980.             DC.B     '   TCB              ;Lists All Tasks',$0A
  981.             DC.B     '   TCB TaskName     ;TaskName Segments',$0A
  982.             DC.B     $00
  983.  
  984.             CNOP  0,2
  985. CmdFormatB: DC.B     '   TCB T TaskName   ;Task/Process Structure',$0A
  986.             DC.B     '   TCB C TaskName   ;CLI Structure',$0A
  987.             DC.B     '   TCB D HexAddress ;Hex-ASCII Dump',$0A
  988.             DC.B     $00
  989.  
  990.             CNOP  0,2
  991. CmdFormatC: DC.B     '   TCB B BPTR       ;BPTR --> APTR',$0A
  992.             DC.B     '   TCB DS           ;Other DOS Structures',$0A
  993.             DC.B     '   TCB DL           ;DOS DeviceList Info',$0A
  994.             DC.B     $00
  995.  
  996.             CNOP  0,2
  997. CmdFormatD: DC.B     '   TCB L            ;Amiga Library Info',$0A
  998.             DC.B     '   TCB D            ;Amiga Device Library Info',$0A
  999.             DC.B     '   TCB S SegListAdr ;Scan SegList',$0A
  1000.             DC.B     $0A,$00
  1001.  
  1002.             CNOP  0,2
  1003. PrtNoTask   DC.B     $0A
  1004.             DC.B     $9B,$33,$33,$6D
  1005.             DC.B     '   Task Not Found '
  1006.             DC.B     $9B,$33,$31,$6D,$0A,$0A,$00
  1007.  
  1008. NodeType    DC.B     'UnKnown  ',0
  1009.             DC.B     'Task     ',0
  1010.             DC.B     'Interrupt',0
  1011.             DC.B     'Device   ',0
  1012.             DC.B     'MsgPort  ',0
  1013.             DC.B     'Message  ',0
  1014.             DC.B     'FreeMsg  ',0
  1015.             DC.B     'ReplyMsg ',0
  1016.             DC.B     'Resource ',0
  1017.             DC.B     'Library  ',0
  1018.             DC.B     'Memory   ',0
  1019.             DC.B     'SoftInt  ',0
  1020.             DC.B     'Font     ',0
  1021.             DC.B     'Process  ',0
  1022.             DC.B     'Semaphore',0
  1023.             DC.B     'SignalSem',0
  1024.  
  1025. Task_State  DC.B     'Invalid',0
  1026.             DC.B     'Added  ',0
  1027.             DC.B     'Run    ',0
  1028.             DC.B     'Ready  ',0
  1029.             DC.B     'Wait   ',0
  1030.             DC.B     'Except ',0
  1031.             DC.B     'Removed',0
  1032.  
  1033. Dev_Type    DC.B     'Device   ',0
  1034.             DC.B     'Directory',0
  1035.             DC.B     'Volume   ',0
  1036.  
  1037.             CNOP  0,2
  1038. PrtFmt      DC.B     '   %-18s  %-12s  %-7s  %-3s  %4ld  %8lx  %8lx',10,0
  1039.  
  1040.             CNOP  0,2
  1041. PrtFmtB     DC.B     '      %4ld  %8lx  %8lx  '
  1042. PrtFmtBA    DC.B     'aaaaaaaa bbbbbbbb cccccccc  '
  1043. PrtFmtBB    DC.B     '............',$0A,$00
  1044.  
  1045.             CNOP  0,2
  1046. HexTable    DC.B     '0123456789ABCDEF'
  1047.  
  1048.             CNOP  0,2
  1049. PrtFmtC     DC.B     '   %8lx: '
  1050. PrtFmtCA    DC.B     'aaaaaaaa bbbbbbbb cccccccc dddddddd'
  1051.             DC.B     '  '
  1052. PrtFmtCB    DC.B     '................'
  1053.             DC.B     $20
  1054.             DC.B     $0A,$00
  1055.  
  1056.             CNOP  0,2
  1057. PrtFmtD01   DC.B     '   CommandLineInterface Structure Address = $%8lx'
  1058.             DC.B     $0A,$00
  1059.  
  1060.             CNOP  0,2
  1061. PrtFmtD02   DC.B     $0A,'   Error --- No Process Structure Found'
  1062.             DC.B     $0A,$0A,$00
  1063.  
  1064.             CNOP  0,2
  1065. PrtFmtD03   DC.B     $0A,'   Error --- Not a CLI Process'
  1066.             DC.B     $0A,$0A,$00
  1067.  
  1068.             CNOP  0,2
  1069. PrtFmtD04   DC.B     '   Task/Process Structure Address = $%8lx'
  1070.             DC.B     $0A,$00
  1071.  
  1072.             CNOP  0,2
  1073. PrtFmtE     DC.B     $0A
  1074.             DC.B     '   BPTR = $%lx',$0A
  1075.             DC.B     '   APTR = $%lx',$0A
  1076.             DC.B     $0A,$00
  1077.  
  1078.             CNOP  0,2
  1079. PrtFmtF     DC.B     $0A
  1080.             DC.B     '   BPTR Error Detected At $%lx',$0A,$00
  1081.  
  1082.             CNOP  0,2
  1083. PrtFmtG01   DC.B     '   Addresses Of Various DOS Structures',$0A,$00
  1084.  
  1085.             CNOP  0,2
  1086. PrtFmtG02   DC.B     '   DosLibrary    $%lx',$0A
  1087.             DC.B     '   RootNode      $%lx',$0A
  1088.             DC.B     '   rn_TaskArray  $%lx',$0A,$00
  1089.  
  1090.             CNOP  0,2
  1091. PrtFmtG03   DC.B     '   DosInfo       $%lx',$0A
  1092.             DC.B     '   DevList       $%lx',$0A,$00
  1093.  
  1094.             CNOP  0,2
  1095. PrtFmtH01   DC.B     '   DOS DevList Structures:',$0A
  1096.             DC.B     '    Address  Type            Task   SegList'
  1097.             DC.B     '  Name',$0A,$00
  1098.  
  1099.             CNOP  0,2
  1100. PrtFmtH02   DC.B     '   %8lx  %-10s  %8lx  %8lx  %-20s',$0A,$00
  1101.  
  1102.             CNOP  0,2
  1103. PrtFmtI01   DC.B     ' Amiga Library Info:',$0A
  1104.             DC.B     ' Address  Name                 -Size  +Size'
  1105.             DC.B     '   ID String',$0A,$00
  1106.  
  1107.             CNOP  0,2
  1108. PrtFmtI02   DC.B     '%8lx  %-20s  %4x   %4x   %-30s',$0A,$00
  1109.  
  1110. ********************* Block Storage **************************************
  1111.  
  1112.                SECTION  mem,BSS
  1113.  
  1114. DOSCmdBuf:     DS.L     1
  1115. DOSCmdLen:     DS.L     1
  1116. DOS_SP:        DS.L     1
  1117. MyTaskCB:      DS.L     1
  1118. _DOSBase:      DS.L     1
  1119. _stdin:        DS.L     1
  1120. _stdout:       DS.L     1
  1121. _stderr:       DS.L     1
  1122.  
  1123. TaskPointer:   DS.L     1
  1124. TaskNamePtr:   DS.L     1
  1125. SegListArray:  DS.L     1
  1126. NumSegments:   DS.L     1
  1127. SegLAddress:   DS.L     1
  1128. CodeAddress:   DS.L     1
  1129. CodeSize:      DS.L     1
  1130. NextSegment:   DS.L     1
  1131. Task_CLI:      DS.L     1
  1132.  
  1133. Save_Reg:      DS.L     1
  1134. Hex_Buffer:    DS.L     1
  1135. ASC_Buffer:    DS.L     1
  1136. PRT_Buffer:    DS.L     1
  1137. NumLWords:     DS.L     1
  1138. Loop_Done:     DS.L     1
  1139. NumChar:       DS.L     1
  1140. NumRows:       DS.L     1
  1141. StartAddr:     DS.L     1
  1142. Error_Flag:    DS.L     1
  1143. Error_Addr:    DS.L     1
  1144.  
  1145. ASCIIBuff:     DS.B     80
  1146.  
  1147. ********************* THATS ALL FOLKS *************************************
  1148.    END
  1149.  
  1150.