home *** CD-ROM | disk | FTP | other *** search
Text File | 1991-12-15 | 192.0 KB | 8,437 lines |
- ******************************************
- * *
- * Xoper 2.3 Copyright (C) Werner Gunther *
- * (68881 code by Lothar English) *
- * *
- ******************************************
- * Written for the A68K V2.6 Assembler *
- * by Charlie Gibbs and *
- * Brian R. Anderson *
- * *
- * Do not use Smallcode/Smalldata when *
- * linking *
- ******************************************
- ;DEBUG SET 1
- XREF _LVOSwitch
- XREF _LVOAddTask
- XREF _LVORemTask
- XREF _LVOFindTask
- XDEF _SysBase
- sysbase equ 4
- mysignal equ 17
-
- CALL MACRO
- xref _LVO\1
- move.l \2,a6
- jsr _LVO\1(a6)
- ENDM
-
- RECALL MACRO
- xref _LVO\1
- 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.
- start lea dataarea,a4
- moveq #3,d0
- lea dummyinput(a4),a1
- getparm move.b (a0)+,(a1)+
- dbf d0,getparm
- move.b #$0a,in
- lea conname(PC),a1
- move.l sysbase,a0
- cmp.w #36,20(a0)
- blt.s 2$
- addq.b #1,post_V34(a4)
- 2$ lea 350(a0),a0
- CALL FindName,sysbase
- move.l d0,condev(a4)
- lea dosname(PC),a1
- move.l sysbase,a0
- lea 378(a0),a0
- move.l a0,-(a7)
- CALL FindName,sysbase
- move.l d0,dosbase(a4)
- move.l 0(a7),a0
- lea gfxname(PC),a1
- RECALL FindName
- move.l d0,gfxbase(a4)
- move.l (a7)+,a0
- lea intuiname(PC),a1
- RECALL FindName
- move.l d0,intuibase(a4)
- move.l d0,a0
- move.l $38(a0),a0
- move.w 12(a0),d0
- sub.w #550,d0
- move.w d0,window_l(a4)
-
- cmp.l #'kill',dummyinput(a4)
- bne.s nokill
-
- ; This code tries to remove Xoper from the System
- ; in case Xoper 'freezes' or crashes.
- ; It works as follows: Xoper leaves the address of its cleanup
- ; routine in the UserData field of its Task structure. EXEC's
- ; context-restore code leaves the current PC of a task in the
- ; first longword of the tasks stack. All we have to do is to
- ; copy the address of Xoper's cleanup routine to its stack and
- ; to rescedule Xoper (using Signal() in this case).
-
- lea newname(a4),a1
- move.l sysbase,a6
- jsr _LVOFindTask(a6)
- tst.l d0
- beq.s 1$
- move.l d0,a1
- move.l $36(a1),d0 ;TC_SPReg: Xoper's stackptr
- jsr getstackptr
- move.l d0,a0
- move.l $58(a1),d0 ;TC_UserData: address of the Exit() routine
- move.l d0,0(a0) ;change Xoper's PC (first value on stack)
- moveq #-1,d0
- move.l sysbase,a6
- jsr _LVOSignal(a6) ;force Xoper to be dispatched
-
- 1$ moveq #0,d0
- rts
-
- nokill move.l sysbase,a6
- move.l 276(a6),a5
- tst.l $ac(a5)
- bne.s notwb
- lea $5c(a5),a0
- RECALL WaitPort
- lea $5c(a5),a0
- RECALL GetMsg
- move.l d0,wbmsg(a4)
- move.w #$740a,in
- notwb:
- IFND DEBUG
- lea xopcon(a4),a1
- RECALL FindPort
- tst.l d0
- bne oops
- ENDC
- tst.l wbmsg(a4)
- beq.s fromdos
- move.l 276(a6),a0 ;ExecBase->ThisTask
- move.l #newname,10(a0)
- jmp mainprg
-
- fromdos:
- IFND DEBUG
- cmp.w #'-b',dummyinput(a4)
- bne.s stt1
- CALL Output,dosbase(a4)
- move.l d0,-(a7)
- move.l #dataarea+windowname,d2
- move.l d0,d1
- moveq.l #newname-windowname-1,d3
- CALL Write,dosbase(a4)
- move.l #cr+dataarea,d2
- move.l (a7)+,d1
- moveq.l #1,d3
- RECALL Write
- stt1 lea start(PC),a1
- move.l -4(a1),d3
- move.l d3,myseg(a4)
-
- move.l #mainprg,d3
- subq #4,d3
- lsr.l #2,d3
- clr.l -4(a1)
-
- move.l 4,a0
- move.l 276(a0),a0
- move.l 152(a0),d1
- CALL DupLock,dosbase(a4)
- move.l d0,-(a7)
-
- CALL Forbid,sysbase
- move.l #newname+dataarea,d1
- clr.l d2
- move.l #3500,d4
- CALL CreateProc,dosbase(a4)
- move.l d0,a0
- move.l (a7)+,d0
- move.l d0,60(a0)
- CALL Permit,sysbase
-
- moveq #0,d0
- rts
- oops CALL Forbid,sysbase
- lea newname(a4),a1
- move.l sysbase,a0
- lea 406(a0),a0
- RECALL FindName
- tst.l d0
- bne.s 1$
- lea newname(a4),a1
- move.l sysbase,a0
- lea 420(a0),a0
- RECALL FindName
- tst.l d0
- beq.s 2$
- 1$ move.l d0,a1
- move.l #(1<<mysignal),d0
- RECALL Signal
- 2$ RECALL Permit
- move.l wbmsg(a4),d0
- beq.s leave
- move.l d0,a1
- RECALL ReplyMsg
- moveq #0,d0
- leave rts
-
- dosname dc.b 'dos.library',0
- intuiname dc.b 'intuition.library',0
- gfxname dc.b 'graphics.library',0
- conname dc.b 'console.device',0
- EVEN
-
- main CODE xoper
- ENDC
- mainprg lea dataarea,a4
- tst.b post_V34(a4)
- beq.s 1$
- jsr reverseimage
- 1$ move.l sysbase,a0
- move.l a0,SysBase(a4)
- move.l a7,realstack(a4)
- move.l 276(a0),a0 ;ExecBase->ThisTask
- move.l a0,mytask(a4)
- move.l 50(a0),oldproctrap ;original AmigaDos Trap-Handler
-
- move.l #exitall,88(a0) ;leave a message for 'KillXoper'
-
- move.l #newname+dataarea,10(a0)
- pea 0
- pea xopcon(a4)
- LIBCALL CreatePort
- addq #8,a7
- move.l d0,replyport(a4)
- pea 0
- pea 0
- LIBCALL CreatePort
- addq #8,a7
- move.l d0,timerport(a4)
- lea timerio,a1
- move.l d0,14(a1)
- move.l d0,a2
- move.b 15(a2),d0
- ext.w d0
- move.w d0,timersig(a4)
- lea timernam(a4),a0
- moveq #0,d1
- moveq #1,d0
- CALL OpenDevice,SysBase(a4) ;open 'timer.device'
- lea timerio,a0
- move.l 20(a0),timerbase(a4)
-
- ;install a counter to determine the amount of CPU-time each
- ;Task uses.
- bsr starttasktimer
- move.l SysBase(a4),a1
- move.l #_LVOSwitch,a0
- move.l 2(a1,a0.w),oldswitch
- move.l #myswitch,d0
- CALL SetFunction,SysBase(a4)
-
- move.l #_LVOAddTask,a0
- move.l 2(a6,a0.w),OldAddTask
- move.l a6,a1
- move.l #myaddtask,d0
- RECALL SetFunction
-
- ;install a counter for PORT-Interrupts
- lea IOCounter(a4),a1
- moveq #3,d0
- CALL AddIntServer,SysBase(a4)
-
- pea 256 ;stack
- pea killidle ;CODE
- pea -127 ;pri
- pea kidlename(a4) ;name
- LIBCALL CreateTask
- lea 16(a7),a7
- move.l d0,idletask(a4)
-
- tst.b post_V34(a4)
- beq.s 12$
- lea dummy,a0
- move.l timerbase(a4),a6
- jsr -$3c(a6)
- lsr.l #8,d0
- move.l d0,timerticks(a4)
- move.l dummy+4,lasttime
- bra.s 11$
-
- 12$ move.l #3906,timerticks(a4)
- pea 0
- pea 0
- LIBCALL CreatePort
- addq #8,a7
- lea sampleio(a4),a1
- move.l d0,14(a1)
- lea timernam(a4),a0
- moveq #0,d1
- move.l d1,d0
- CALL OpenDevice,SysBase(a4) ;open 'timer.device'
-
- lea sampleio(a4),a1
- move.l #3599999,32(a1)
- move.w #9,28(a1)
- CALL SendIO,SysBase(a4)
-
- moveq #mysignal,d0
- CALL AllocSignal,SysBase(a4)
-
- 11$ jsr gettdtasks
-
- ;Attempt to open a startup script
- move.l mytask(a4),a5 ;disable the 'please insert'
- move.l 184(a5),-(a7)
- move.l #-1,184(a5) ;requester
- move.l #dataarea+startupname+2,d1 ;'Xoper.Startup'
- move.l #1005,d2
- CALL Open,dosbase(a4)
- tst.l d0
- bne.s 7$
- move.l #startupname+dataarea,d1 ;'S:Xoper.Startup'
- move.l #1005,d2
- CALL Open,dosbase(a4)
-
- 7$ move.w #$00ff,16(a5)
- move.l (a7)+,184(a5) ;reenable the requester
- move.l d0,infile(a4)
- beq.s nostartup
-
- move.b #1,fromfile(a4)
-
- 8$ lea dummy,a5
- moveq #-1,d5
- 5$ addq.l #1,d5
- move.l infile(a4),d1
- move.l a5,d2
- add.l d5,d2
- moveq.l #1,d3
- CALL Read,dosbase(a4)
- tst.l d0
- bgt.s 10$
-
- move.l infile(a4),d1
- CALL Close,dosbase(a4)
- clr.l infile(a4)
- tst d5
- beq.s endstartup
- bra.s 9$
-
- 10$ cmp.b #10,0(a5,d5)
- beq.s 9$
- cmp.b #13,0(a5,d5)
- bne.s 5$
-
- 9$ move.l d5,d0
- addq #1,d0
- bsr cli ;execute the script as if typed in
- tst.l infile(a4)
- bne.s 8$
-
- endstartup clr.b fromfile(a4)
-
- nostartup
- tst.l wbmsg(a4)
- bne.s noin
- cmp.b #10,dummyinput(a4)
- beq.s noin
- cmp.w #'-b',dummyinput(a4) ;requested as a background task ?
- beq.s noin
- move.l dummyinput(a4),in
- move.b #10,in+4
- bra.s nostartup2
- noin cmp.b #10,in
- beq.s default
- tst.b in
- bne.s nostartup2
-
- default move.w #$740a,in ;couldn't find defaults, defaults to
- ;tasks
-
- nostartup2 cmp.w #'-b',dummyinput(a4)
- beq instback
-
- ;This code just opens a Window. Position
- ;and size are taken from window_l,window_t,
- ;window_w,window_h.
- restart tst.b ownscreen(a4)
- beq.s 1$
- bsr createscreen
- bra.s 2$
- 1$ bsr setupwindow
-
- 2$ move.l mytask(a4),a0
- clr.l 26(a0) ;clear 'spurious' signals
-
- clr.l ptr(a4)
- tst.b gotguru(a4)
-
- beq.s 3$
- bsr showguru
- clr.b gotguru(a4)
- 3$ bra processmsgs
-
- ;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'.
- ;search the command to be executed. If none is found,
- ;show a help message
-
- showwhat tst.b fromfile(a4)
- bne endshow
- move.w cmdptr(a4),d7
-
- input lea in,a0
- move.b 0(a0,d7.w),d0
- beq endshow
- addq.b #1,d7
- cmpi.b #' ',d0
- bne.s 1$
-
- bsr testifend
- beq endshow
- move.w d2,cmdptr(a4)
- bra notfinished
-
- 1$ cmpi.b #10,d0
- beq endshow
- or.b #32,d0
- cmpi.b #'q',d0
- beq exit
- lea params(a4),a0
- moveq #0,d1
- i1 cmp.b 0(a0,d1),d0
- beq.s foundp
- addq.b #1,d1
- cmpi.b #parmnum,d1
- bne.s i1
-
- move.w #usetxt,d0
- move.b #1,mnflag
- bsr putnamw
- clr.b mnflag(a4)
- bra endshow
-
- foundp lsl.b #2,d1
- lea subs(PC),a0
- move.b #1,mnflag(a4)
- jsr 0(a0,d1)
- clr.b mnflag(a4)
- bsr testifend
- beq input
- bsr newline
- bra input
-
- testifend lea in,a0
- lea 0(a0,d7),a0
- move.w d7,d2
- 2$ move.b (a0)+,d0
- beq.s 1$
- cmpi.b #' ',d0
- bne.s 3$
- addq #1,d2
- bra.s 2$
- 3$ cmpi.b #10,d0
- 1$ rts
-
-
- endshow tst.b fromfile(a4)
- bne.s nomore
- clr.w cmdptr
- notfinished bsr starttimer
- nomore tst.b fromfile(a4)
- bne.s 1$
- clr.l lastprinted(a4)
- bsr blastout
- 1$ rts
-
- ;get the string from inputbuffer; search and execute
- ;the command, if any.
-
- cli lea dummy,a0
- subq #1,d0
- cl2 subq #1,d0
- bmi.s cl1
- cmp.b #' ',0(a0,d0)
- beq.s cl2
- cl1 addq #1,d0
- move.b #10,0(a0,d0)
- bsr kllblnks
- cmpi.b #10,0(a0)
- beq showwhat
- cmpi.b #';',0(a0)
- beq nomore
-
- bsr findcmd
- tst.l d2
- bpl.s okcmd
- bsr findalias
- tst.l d2
- bmi.s nm1
-
- okcmd clr.b procnum(a4)
- adda.w d1,a0
- bsr kllblnks
- lsl #2,d2
- lea cmdaddr(PC),a1
- jsr 0(a1,d2)
- bra nomore
-
- nm1 lea in,a1
- lea buffer,a2
- nm2 move.b (a1)+,(a2)+
- cmp.b #10,-1(a1)
- bne.s nm2
- lea in,a1
- nm0 move.b (a0)+,(a1)+
- cmp.b #10,-1(a1)
- bne.s nm0
- lea dummy,a2
- lea buffer,a1
- nm3 move.b (a1)+,(a2)+
- cmp.b #10,-1(a1)
- bne.s nm3
- clr.w cmdptr(a4)
- bra showwhat
-
- findcmd bsr strbuf
- move.l a0,a5
- lea commds(a4),a2
- moveq #0,d2
- 1$ lea buffer,a0
- move.l a2,a1
- bsr strcmp
- beq 3$
- 2$ tst.b (a2)+
- bne.s 2$
- addq #1,d2
- cmp.w #cmdnum,d2
- bne.s 1$
- moveq #-1,d2
- 3$ move.l a5,a0
- rts
-
- findalias move.l a0,a5
- move.l aliaslist(a4),d4
- 1$ beq.s 3$
- move.l d4,a3
- lea buffer,a0
- lea 5(a3),a1
- move.b 4(a3),d2
- ext.w d2
- ext.l d2
- bsr strcmp
- beq 4$
- move.l 0(a3),d4
- bra.s 1$
- 3$ moveq #-1,d2
- 4$ move.l a5,a0
- rts
-
- subs bra showtask
- bra showaddr
- bra showdevs
- bra showlibs
- bra showres
- bra showresi
- bra showmem
- bra showprt
- bra showint
- bra stack
- bra clicomm
- bra tasktime
- bra semaphores
- cmdaddr bra settime
- bra taskpri
- bra info
- bra pri
- bra flush
- bra freeze
- bra warm
- bra signal
- bra break
- bra alert
- bra lastalert
- bra instback
- bra stopall
- bra clear
- bra cancel
- 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
- bra inphand
- bra nohead
- bra sort
- bra hide
- bra hidden
- bra setwindow
- bra cancel
- bra iconifyoff
- bra historylines
- bra historylength
- bra showhistory
- bra repeatcmd
- bra remresident
- bra saveoutput
- bra killhistory
- bra iconbackdrp
- bra setfont
- bra trapguru
- bra outputlines
- bra usescreen
- bra usewindow
- bra grabtimerio
- bra dchange
- bra alias
- bra remnode
- bra setfkey
- bra clicmd
- bra taskinfo
- bra coldreboot
- bra reboot
- bra zerotimer
- bra propgadoff
- bra iconpos
- bra remport
- bra remintserver
- bra frags
- bra snoopfiles
- bra snoop
- bra tracelocks
-
- ;------ Task-Structures-----
-
- tasktime move.b #-1,tasktyp(a4)
- bra.s startask
- showaddr clr.b tasktyp(a4)
- bra.s startask
- showtask move.b #1,tasktyp(a4)
- startask bsr getdevhan
- tst.b headon(a4)
- beq noheader1
- move.w #infoh1,d0
- bsr putstrw
- move.l SysBase(a4),a6
- move.w #cpu3,d0
- btst #2,297(a6) ;mc 68030 ?
- bne.s cpupr
- subq.w #cpu3-cpu2,d0
- btst #1,297(a6) ;mc 68020 ?
- bne.s cpupr
- subq.w #cpu2-cpu1,d0
- btst #0,297(a6) ;mc 68010 ?
- bne.s cpupr
- subq.w #cpu1-cpu0,d0 ;mc 68000
- cpupr bsr putstrw
- move.l d0,d1
- move.w #cpu5,d0
- btst #5,297(a6) ;mc 68882 ?
- bne.s fpupr
- move.l d1,d0
- btst #4,297(a6) ;mc 68881 ?
- beq.s no881
- subq.w #cpu5-cpu4,d0
- fpupr bsr putstrw
- no881 moveq #20,d1
- bsr tab
- move.w #infoh3,d0
- bsr putstrw
-
- noheader1 move.l SysBase(a4),a6
-
- moveq #1,d5
- bsr getaskdat
- move.l a5,savedat(a4)
- bsr getstdio
-
- moveq #0,d4
- move.l d4,d3
- move.l d4,d1
- lea usedtime,a0
- move.b entries(a4),d1
- subq #1,d1
- move.l idletask(a4),d2
- 1$ lea -16(a5),a5
- move.l 12(a5),d5
- add.l d5,d4
- move.l 0(a5),d0
- cmp.l d0,d2
- bne.s 2$
- move.l d5,d3
- 2$ bsr gettimeentry
- add.l d5,0(a0,d0.w)
- dbf.s d1,1$
- move.l d4,maxdisp(a4)
- sub.l d3,d4
- move.l d4,dispatches(a4)
-
- tst.b headon(a4)
- beq.s noheader2
- move.l maxdisp(a4),d0
- move.l dispatches(a4),d3
- bsr prcent
- bsr newline
- move.w #infoh2,d0
- bsr putstrw
-
- noheader2 move.l SysBase(a4),a0
- move.l 284(a0),d0
- move.l oldswitches(a4),d1
- move.l d0,oldswitches(a4)
- sub.l d1,d0
- tst.b headon(a4)
- beq noheader3
- mulu #100,d0
- move.l d0,-(a7)
-
- lea secs(a4),a0
- lea mics(a4),a1
- CALL CurrentTime,intuibase(a4)
- move.l secs(a4),d3
- lsl.l #1,d3
- move.l d3,d1
- lsl.l #2,d3
- add.l d1,d3
- move.l mics(a4),d0
- move.l #100000,d1
- bsr div
- add.l d0,d3
- move.l time10(a4),d1
- move.l d3,time10(a4)
- sub.l d1,d3
- move.l (a7)+,d0
- move.l d3,-(a7)
- move.l d3,d1
- bsr div
- moveq #1,d5
- bsr putfrac
-
- moveq #20,d1
- bsr tab
- move.w #infoh7,d0
- bsr putstrw
- move.l iocount(a4),d0
- clr.l iocount(a4)
- mulu #100,d0
- move.l (a7)+,d3
- move.l d3,d1
- bsr div
- moveq #1,d5
- bsr putfrac
-
- bsr newline
- bsr newline
- noheader3 lea t4header(a4),a0
- tst.b tasktyp(a4)
- bmi.s phedder
- lea theader(a4),a0
- tst.b tasktyp(a4)
- bne.s phedder
- lea t2header(a4),a0
- move.l SysBase(a4),a6
- btst #4,297(a6) ;AttnFlags FPU ?
- bne.s phedder
- lea t3header(a4),a0
- phedder bsr puthead
- move.l savedat(a4),a5
-
- pt1 tst.b entries(a4)
- beq pt2
- lea -16(a5),a5
- bsr hideit
- tst d0
- beq ptend
- move.l idletask(a4),d0
- cmp.l 0(a5),d0
- beq ptend
- move.l 0(a5),a3
- move.l a3,d0
- move.l d0,node(a4) ;ID = task address
- bsr hexa
- tst.b tasktyp(a4)
- ble.s pt12
- moveq #0,d0
- move.b 8(a3),d0
- bsr gettype
-
- pt12 moveq #0,d0
- move.b 9(a5),d0
- subq.b #1,d0
- mulu #9,d0
- move.w #status,d1
- add.w d1,d0
- bsr putstrw ;state
- tst.b tasktyp(a4)
- beq pt345
- bpl pt13
-
- move.l 0(a5),d0
- bsr gettimeentry
- lea taskstamps,a0
- lea 0(a0,d0.w),a0
- move.l secs(a4),d0
- sub.l 0(a0),d0
- bsr putstamp
- bsr putblank
- move.l usedtime-taskstamps(a0),d0
- move.l timerticks(a4),d1
- bsr div
- bsr putstamp
- moveq #'.',d0
- bsr putchar
- move.l d1,d0
- move.l timerticks(a4),d1
- addq #5,d1
- divu #10,d1
- divu d1,d0
- or.b #'0',d0
- bsr putchar
- bsr putblank
- bra pt346
-
- pt345 move.l 18(a3),d0 ;SigAlloc
- bsr hexa
- move.w #longnix,d0
- cmp.b #4,9(a5) ;tc_state waiting ?
- beq.s pt14
- bsr putstrw
- bra.s pt15
-
- pt14 move.l 22(a3),d0 ;SigWait
- bsr hexa
- pt15 move.l 26(a3),d0 ;SigRecvd
- bsr hexa
-
- move.w #nofpu,d1 ;keine fpu annehmen
- move.l SysBase(a4),a6
- btst #4,297(a6) ;AttnFlags FPU ?
- beq.s prt154
- move.w #nullstate,d1 ;fpu im null state annehmen
- prt154 move.l #*,d0
- cmp.b #2,9(a5) ;tc_state running ?
- beq.s pt16 ;kann nur xoper selbst sein
-
- moveq #0,d0 ;0(sp) -> pc wenn keine fpu
- move.l 54(a3),a1 ;tc_SPReg
- btst #4,297(a6) ;AttnFlags FPU
- beq.s prt151 ;keine FPU
-
- tst.b (a1) ;NULL frame ?
- beq.s prt150 ;ja
-
- move.w (a1),d0 ;frame flag / format word
- lea 110(a1),a1 ;offset fuer fpu regs
- cmp.w #-1,d0
- beq.s prt153
- lea 12(a1),a1 ;3 longs mehr
-
- prt153 moveq #0,d0
- move.b 1(a1),d0 ;frame size
- move.l 4(a1,d0),d0 ;pc
-
- move.w #idle,d1
- cmp.b #$18,1(a1) ;mc 68881 idle ?
- beq.s pt16
- addq.w #busy-idle,d1
- cmp.b #$b4,1(a1) ;mc 68881 busy ?
- beq.s pt16
- prt152 addq.l #weissnicht-busy,d1 ;vielleicht mc 68882 ??
- bra.s pt16
-
- prt150 moveq #4,d0 ;offset NULL frame
- prt151 move.l 0(a1,d0),d0 ;n(sp) -> pc
- pt16 bsr hexa
-
- move.l SysBase(a4),a6
- btst #4,297(a6) ;AttnFlags FPU ?
- beq.s pt4
-
- move.w d1,d0 ;fpu state
- bsr putstrw
- bra.s pt4
-
- pt13 move.b 10(a5),d3
- bsr plusmins
-
- move.l dispatches(a4),d0
- tst.b usageflag(a4)
- beq.s pt37
- move.l maxdisp(a4),d0
- pt37 move.l 12(a5),d3
- bsr prcent
-
- pt346 cmpi.b #13,8(a5)
- bne.s noproc
- tst.l 172(a3)
- beq.s noproc
- move.b 11(a5),d3
- bsr bytedec
- bra.s pt4
- noproc move.w #nix,d0
- bsr putstrw
-
- pt4 bsr gettaskname
-
- tst.b tinfo(a4)
- beq pt223
-
- tst.b cliexec(a4) ;display 'real' taskname if
- beq.s 10$ ;it is a CLI
- bsr putblank
- move.l 4(a5),d0
- bsr putstr
-
- 10$ lea tdtasks(a4),a1 ;check if the task is a trackdisk.device
- moveq #3,d3
- 1$ cmp.l (a1)+,a3
- dbeq.s d3,1$
- bne.s pt224
-
- eor.l #'0'+3,d3 ;print unit#
- move.b d3,unitmsg+8(a4)
- move.w #unitmsg,d0
- bsr putstrw
-
- pt224 moveq #0,d3 ;see if it is a device handler
- lea buffer+2400,a2
- lea 200(a2),a1
-
- 1$ move.l (a2)+,d0
- beq.s pt222
- move.l (a1)+,d2
- cmp.l 0(a5),d0
- bne.s 1$
-
- 2$ move.l #' {',d0 ;print dos devicename
- bsr putlongascii
- move.l d2,d0
- bsr putbcpl
- move.l #':}',d0
- bsr putlongascii
-
- pt222 lea buffer+2160,a1 ;is it a device handler for some
- lea 160(a1),a2 ;CLI input/output ?
- moveq #0,d5
-
- 3$ move.l (a1)+,d0
- beq.s 4$
- move.w (a2)+,d2
- cmp.l 0(a5),d0
- bne.s 3$
-
- tst d5
- bne.s 5$
- move.l #' (',d0 ;print CLI#
- bsr putlongascii
- bra.s 6$
- 5$ move.l #'& ',d0
- bsr putlongascii
- 6$ moveq #1,d5
- moveq #'<',d0
- tst.w d2
- bmi.s 7$
- moveq #'>',d0
- 7$ bsr putchar
- move.l #'CLI ',d0
- bsr putlongascii
- moveq #0,d0
- move.b d2,d0
- moveq #0,d3
- bsr longdec
- bra.s 3$
-
- 4$ tst d5
- beq.s pt223
- subq.l #1,ptr(a4)
- moveq #')',d0
- bsr putchar
-
- pt223 bsr newline
-
- ptend subq.b #1,entries(a4)
- bra pt1
- pt2 rts
-
- putlist move.l 0(a3),a3
- tst.l 0(a3)
- beq.s endlist
- bsr putdata
- bra.s putlist
- endlist rts
-
- putdata move.l a3,0(a5)
- move.l 10(a3),4(a5) ;task->ln_Name
- move.b 8(a3),8(a5) ;task->ln_Type
- move.b 15(a3),9(a5) ;task->tc_State
- move.b 9(a3),10(a5) ;task->ln_Pri
- move.b 143(a3),11(a5) ;Process->pr_Tasknum
- clr.l 12(a5)
- lea cputime,a0
- move.l tasksnum(a4),d1
- subq #1,d1
- bmi.s pua1
- pua3 cmp.l (a0)+,a3
- dbeq d1,pua3
- tst d1
- bmi.s pua1
- pua2 move.l 508(a0),d1
- move.l d1,12(a5)
- pua1 lea 16(a5),a5
- addq #1,d5
- rts
-
- gettype and.l #$f,d0
- mulu #11,d0
- add.w #type,d0
- bra putstrw
-
- getaskdat move.l d5,-(a7)
- bsr.s getaskdat2
- move.b d5,entries(a4)
- move.l (a7)+,d5
- beq.s 1$
- clr.l tasksnum(a4)
- 1$ moveq #16,d2
- lea -32(a5),a2
- bsr sortlist
- rts
-
- getaskdat2 lea buffer,a5
- getaskdat3 moveq #0,d5
- move.w #$4000,$dff09a
- lea stplist(a4),a3
- bsr putlist
- move.l SysBase(a4),a3
- lea 420(a3),a3 ;SysBase->TaskWait
- bsr putlist
- move.l SysBase(a4),a3
- lea 406(a3),a3 ;SysBase->TaskReady
- bsr putlist
- move.l SysBase(a4),a3
- move.l 276(a3),a3 ;SysBase->ThisTask
- bsr putdata
- 1$ move.w #-$4000,$dff09a
- rts
-
- getaskdat4 move.l #2800,d0
- moveq #0,d1
- CALL AllocMem,_SysBase(PC)
- moveq #0,d5
- tst.l d0
- beq.s 1$
- move.l d0,-(a7)
- move.l d0,a5
- bsr.s getaskdat3
- move.l (a7)+,d0
- 1$ rts
-
- freetaskbuf move.l a5,a1
- move.l #2800,d0
- CALL FreeMem,_SysBase(PC)
- rts
-
- cleanuptimers
- bsr.s getaskdat4
- move.l d0,a6
- moveq #0,d1
- move.l d1,d4
- lea taskstampid,a1
- 1$ lea -16(a5),a5
- move.l 0(a5),d0
- bsr.s gettimeentry
- lea taskstampid,a3
- lea 0(a3,d0.w),a3
- move.l 0(a3),d2
- move.l 0(a1),0(a3)
- move.l d2,(a1)
- move.l taskstamps-taskstampid(a3),d2
- move.l taskstamps-taskstampid(a1),taskstamps-taskstampid(a3)
- move.l d2,taskstamps-taskstampid(a1)
- move.l usedtime-taskstampid(a3),d2
- move.l usedtime-taskstampid(a1),usedtime-taskstampid(a3)
- move.l d2,usedtime-taskstampid(a1)
- addq.l #4,a1
- addq #1,d1
- subq.b #1,d5
- bne.s 1$
- move.w d1,numtaskstimed+dataarea
- bsr freetaskbuf
- rts
-
- gettimeentry
- movem.l d1/a0,-(a7)
- lea taskstampid,a0
- move.w numtaskstimed(a4),d1
- subq #1,d1
- 1$ cmp.l (a0)+,d0
- dbeq.s d1,1$
- move.l a0,d0
- sub.l #taskstampid+4,d0
- movem.l (a7)+,d1/a0
- rts
-
- sortlist tst.b sorton(a4)
- beq.s sort5
- lea buffer,a1
- sort1 lea 0(a1,d2),a3
- sort2 move.l 0(a1),d1
- cmp.l 0(a3),d1
- bge.s sort3
- move.l d2,d1
- subq #1,d1
- sort4 move.b 0(a3,d1),d0
- move.b 0(a1,d1),0(a3,d1)
- move.b d0,0(a1,d1)
- dbf d1,sort4
- sort3 lea 0(a3,d2),a3
- cmp.l a2,a3
- ble.s sort2
- lea 0(a1,d2),a1
- cmp.l a2,a1
- bne.s sort1
- sort5 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
- moveq #0,d5
- bsr putfrac
- move.w #infoh4,d0
- bra putstrw
-
- putfrac divu #10,d0
- move d0,d3
- swap d0
- move d0,d1
- tst d5
- bne.s 1$
- cmp.w #100,d3
- ble.s 1$
- move.w #whatsthis,d0
- bra putstrw
- 1$ bsr bytedec
- lea out,a0
- move.b #'.',-1(a0,d0)
- or.b #'0',d1
- move d1,d0
- bra putchar
-
- hideit tst.b hideoff(a4)
- beq.s pt73
- pt75 moveq #1,d0
- rts
- pt73 lea hidestart(a4),a3
- move.l 4(a5),a0
- pt74 tst.l 0(a3)
- beq.s pt75
- move.l 0(a3),a3
- lea 4(a3),a1
- bsr strcmp
- tst d0
- beq hideend
- bra.s pt74
- hideend rts
-
- getaskname2 movem.l a3/a5,-(a7)
- link a2,#-10
- move.l a7,a5
- move.l d0,a3
- tst.l d0
- bne.s 2$
- bsr putstr
- bra.s 1$
- 2$ move.b 8(a3),8(a5)
- move.l 10(a3),4(a5)
- bsr gettaskname
- 1$ unlk a2
- movem.l (a7)+,a3/a5
- rts
-
- gettaskname movem.l a1-a2,-(a7)
- clr.b cliexec(a4)
- tst.b cmdcli(a4)
- beq.s 2$
- cmpi.b #13,8(a5)
- bne.s 2$
-
- CALL Forbid,SysBase(a4)
- tst.l 140(a3) ;pr_TaskNum
- beq.s 1$
- move.l 172(a3),d0 ;pr_CLI
- beq.s 1$
- move.l d0,a1
- adda.l a1,a1
- adda.l a1,a1
- tst.l 60(a1) ;cli_Module
- beq.s 1$
- move.l 16(a1),a2
- adda.l a2,a2
- adda.l a2,a2
- tst.b 0(a2)
- beq.s 1$
- move.w #openbrak,d0
- bsr putstrw
- move.l 16(a1),d0 ;cli_CommandName
- CALL Permit,SysBase(a4)
- bsr putbcpl
- bset.b #1,cliexec(a4)
- move.w #closebrak,d0
- movem.l (a7)+,a1-a2
- bra putstrw
-
- 1$ CALL Permit,SysBase(a4)
- 2$ move.l 4(a5),d0
- movem.l (a7)+,a1-a2
- bra putstr
-
- getstdio tst.b tinfo(a4)
- beq 4$
- move.l a5,-(a7)
- lea buffer+2160,a0
- lea 160(a0),a1
- moveq #40,d4
- moveq #0,d3
- move.b entries(a4),d3
- subq #1,d3
-
- 3$ lea -16(a5),a5
- cmpi.b #13,8(a5)
- bne.s 1$
- move.l 0(a5),a3
- CALL Forbid,SysBase(a4)
- move.b 143(a3),d2 ;pr_TaskNum
- ext.w d2
- beq.s 2$
- move.l 172(a3),d0 ;pr_CLI
- beq.s 2$
- move.l 160(a3),d0 ;pr_COS
- beq.s 2$
- bsr.s 5$
- or.w #$8000,d2
- 2$ move.l 156(a3),d0
- beq.s 6$
- bsr 5$
-
- 6$ RECALL Permit
- tst d4
- ble.s 7$
- 1$ dbf d3,3$
-
- 7$ clr.l (a0)+
- move.l (a7)+,a5
- 4$ rts
-
- 5$ lsl.l #2,d0
- move.l d0,a2
- move.l 8(a2),d0 ;fh_Type
- ble.s 8$ ;negative = plain file
- move.l d0,a2
- move.l 16(a2),d0 ;mp_SigTask
- beq.s 8$
- move.l d0,(a0)+
- move.w d2,(a1)+
- subq #1,d4
- 8$ rts
-
- getdevhan tst.b tinfo(a4)
- beq.s 4$
- move.l a3,-(a7)
- bsr devinfo
- moveq #49,d3
- lea buffer+2400,a2
- lea 200(a2),a3
- 1$ adda.l a1,a1
- adda.l a1,a1
- tst.l 4(a1)
- bne.s 3$
- move.l 8(a1),d0
- beq.s 3$
- sub.l #92,d0
- move.l d0,(a2)+
- move.l 40(a1),(a3)+
- subq #1,d3
- beq.s 2$
- 3$ move.l 0(a1),d0
- beq.s 2$
- move.l d0,a1
- bra.s 1$
-
- 2$ clr.l (a2)+
- move.l (a7)+,a3
- 4$ rts
-
- *-------- mem-hunks ------------
-
- showmem lea mheader(a4),a0
- bsr puthead
- move.l SysBase(a4),a5
- lea 322(a5),a5 ;SysBase->MemList
- moveq #0,d5
- mem1 move.l 0(a5),a5 ;MemList->ln_Next
- tst.l 0(a5)
- beq.s mem2
- move.l 20(a5),d0 ;MemHeader->mh_Lower
- bsr hexa
- move.l 24(a5),d0 ;MemHeader->mh_Upper
- bsr hexa
- move.l 28(a5),d0 ;MemHeader->mh_Free
- add.l d0,d5
- moveq #1,d3
- bsr longdec
- move.b 15(a5),d3 ;MemHeader->mh_Attributes
- bsr bytedec
- move.b 9(a5),d3 ;MemHeader->ln_pri
- bsr plusmins
- move.l 10(a5),d0 ;MemHeader->ln_Name
- move.l a5,node(a4)
- bsr putnam
- bra.s mem1
- mem2 move.w #infoh6,d0
- bsr putstrw
- moveq #19,d1
- bsr tab
- moveq #0,d3
- move.l d5,d0
- bsr longdec
- newline move.w #cr,d0
- bra putstrw
-
- frags move.l SysBase(a4),a5
- lea 322(a5),a5 ;SysBase->MemList
- 1$ move.l 0(a5),a5 ;MemList->ln_Next
- tst.l 0(a5)
- bne.s 10$
- rts
- 10$ move.w #memtyp,d0
- bsr putstrw
- move.l 10(a5),d0
- bsr putnam
- lea fraghead(a4),a0
- bsr puthead
- lea buffer,a1
- move.l a1,a2
- moveq #64,d0
- 9$ clr.l (a2)+
- dbf d0,9$
- lea 128(a1),a2
- move.l 16(a5),d0 ;MemHeader->mh_First
- beq.s 5$
- move.l d0,a3
- CALL Forbid,SysBase(a4)
-
- 2$ move.l 4(a3),d0
- move.l d0,d5
- moveq #31,d1
- 3$ lsl.l #1,d0
- btst.l #31,d0
- dbne d1,3$
- lsl.l #2,d1
- addq.l #1,0(a1,d1.w)
- cmp.l 0(a2,d1.w),d5
- ble.s 4$
- move.l d5,0(a2,d1.w)
- 4$ move.l 0(a3),d0
- beq.s 5$
- move.l d0,a3
- bra.s 2$
-
- 5$ CALL Permit,SysBase(a4)
- moveq #0,d1
- 8$ move.l (a2)+,d5
- move.l (a1)+,d2
- beq.s 6$
- moveq #0,d0
- bset.l d1,d0
- lsr.l #1,d0
- move.l d0,d4
- bsr hexa
- move.l d4,d0
- moveq #1,d3
- bsr longdec
- move.l d2,d0
- bsr longdec
- move.l d5,d0
- bsr longdec
- 7$ bsr newline
- 6$ addq #1,d1
- cmp.w #31,d1
- ble.s 8$
- bsr newline
- bra 1$
-
- *-------- Task-Stack ------------
-
- stack lea stackhead(a4),a0
- bsr puthead
- moveq #0,d5
- bsr getaskdat
-
- sta1 tst.b entries(a4)
- beq sta8
- lea -16(a5),a5
- bsr hideit
- tst d0
- beq sta9
- move.l 0(a5),a1
- cmp.b #13,8(a1) ;task->ln_Type
- bne.s sta6
- move.l 172(a1),d0 ;pr_CLI
- beq.s sta6
- lsl.l #2,d0
- move.l d0,a0
- tst.l 60(a0) ;cli_Module
- beq.s sta6
- moveq #1,d3
- move.l 52(a0),d4 ;cli_DefaultStack
- lsl.l #2,d4
- move.l 176(a1),d0 ;pr_ReturnAddress
- sub.l d4,d0
- bsr hexa
- move.l d4,d0
- bsr longdec
- move.l 176(a1),d0 ;pr_ReturnAddress
- sub.l 54(a1),d0 ;tc_SPReg
- bra.s sta7
-
- sta6 move.l 58(a1),d0 ;tc_SPLower
- bsr hexa
- moveq #1,d3
- move.l 62(a1),d0 ;tc_SPUpper
- sub.l 58(a1),d0 ;tc_SPLower
- bsr longdec
- move.l 62(a1),d0 ;tc_SPUpper
- sub.l 54(a1),d0 ;tc_SPReg
- sta7 bsr longdec
- move.l a1,a3
- bsr gettaskname
- bsr newline
- sta9 subq.b #1,entries(a4)
- bra sta1
- sta8 rts
-
- clicomm lea clicomhead(a4),a0
- bsr puthead
- moveq #0,d5
- bsr getaskdat
- clic1 tst.b entries(a4)
- beq clic8
- lea -16(a5),a5
- bsr hideit
- tst d0
- beq clic0
- move.l 0(a5),a2
- cmpi.b #13,8(a2) ;ln_Type
- bne clic0
- tst.l 172(a2)
- beq clic0
- move.l 140(a2),d3 ;pr_TaskNum
- beq clic0
- move.l a2,d0
- move.l d0,node(a4)
- bsr hexa
- moveq #0,d0
- move.b 9(a5),d0
- subq #1,d0
- mulu #9,d0
- move.w #status,d1
- add.w d1,d0
- bsr putstrw
- move.l 172(a2),a3 ;pr_CLI
- adda.l a3,a3
- adda.l a3,a3
- move.w #script,d0
- tst.l 40(a3) ;cli_InterActive
- beq.s clic5
- addq.w #interact-script,d0
- clic5 bsr putstrw
- move.w #backg,d0
- tst.l 44(a3) ;cli_Background
- bne.s clic6
- addq.w #foreg-backg,d0
- clic6 bsr putstrw
- bsr bytedec
- move.l 4(a5),d0
- bsr putstr
- moveq #49,d1
- bsr tab
- bsr putblank
- move.l 128(a2),d0 ;pr_SegList
- beq.s noprogloadc
- clic3 move.l 172(a2),d1 ;pr_CLI
- bne.s clic4
- noprogloadc move.w #longnix,d0
- bsr putnamw
- bra.s clic0
- clic4 lsl.l #2,d1
- move.l d1,a2
- move.l 60(a2),d1 ;cli_Module
- beq.s noprogloadc
- move.l 16(a2),d0 ;cli_CommandName
- bsr putbcpl
- move.l 36(a2),d1 ;cli_CommandFile
- beq.s 1$
- move.l d1,d2
- lsl.l #2,d1
- move.l d1,a0
- tst.b 0(a0)
- beq.s 1$
- bsr putblank
- move.w #openbrak,d0
- bsr putstrw
- move.l d2,d0
- bsr putbcpl
- move.w #closebrak,d0
- bsr putstrw
- 1$ bsr newline
-
- clic0 subq.b #1,entries
- bne clic1
- clic8 rts
-
- *--------- interrupts ------------
- showint lea iheader(a4),a0
- bsr puthead
- lea intnames(a4),a5
- lea inttyp(a4),a1
- moveq #0,d6
- findint lea inttyp(a4),a1
- moveq #0,d1
- moveq #15,d5
- move.l SysBase(a4),a3
- lea 84(a3),a3 ;SysBase->IntVects[16]
-
- si0 tst.b 0(a1,d1)
- bne.s si4
- move.l 8(a3),a2 ;IntVector->iv_Node
- bra.s si5
- si4 move.l 0(a3),a2 ;Interrupt->is_Node
- si5 cmp.l #0,a2
- beq nxtint
- tst.b 0(a1,d1)
- beq.s si1
- si2 move.l 0(a2),a2 ;is_Node->ln_Next
- tst.l 0(a2)
- beq nxtint
- si1 tst d6
- beq.s 3$
- cmp.l a2,d4
- bne.s 4$
- rts
- 3$ move.l a2,d0
- move.l d0,node(a4)
- bsr hexa
- move.l 14(a2),d0 ;Interrupt->is_Data
- bsr hexan
- move.l 18(a2),d0 ;Interrupt->is_Code
- bsr hexan
- move.b 9(a2),d3 ;Interrupt->ln_Pri
- movem.l d6/a3,-(a7)
- bsr plusmins
- move.w #intserv,d0
- tst.b 0(a1,d1)
- bne.s 1$
- move.w #inthand,d0
- 1$ bsr putstrw
- move.w #intdis,d0
- move.w $dff01c,d3
- btst.w d1,d3
- beq.s 2$
- move.w #inten,d0
- 2$ bsr putstrw
- movem.l (a7)+,d6/a3
- move.l a5,d0
- bsr putstr
- move.l 10(a2),d0 ;Interrupt->ln_Name
- bsr putnam
- tst.b 0(a1,d1)
- bne si2
- 4$ tst.l 0(a2)
- beq.s nxtint
- move.l 0(a2),a2
- bra si1
- nxtint addq #1,d1
- lea 12(a5),a5
- lea 12(a3),a3
- dbf d5,si0
- rts
-
- *--------- resident ------------
-
- showresi lea rheader(a4),a0
- bsr puthead
- move.l SysBase(a4),a5
- move.l 300(a5),a5 ;SysBase->ResModules
-
- r1 tst.l 0(a5)
- beq r2
- move.l 0(a5),d0 ;Resident->ln_Next
- tst.l d0
- bpl.s r3
- bclr #31,d0
- movea.l d0,a5
- bra.s r1
- r3 movea.l d0,a3
- move.l d0,node(a4)
- bsr hexa
- move.b 13(a3),d3 ;rt_Pri
- bsr plusmins
- move.b 10(a3),d0 ;rt_Flags
- bsr bin
- move.b 11(a3),d3 ;rt_Version
- bsr bytedec
- move.b 12(a3),d0 ;rt_Type
- bsr gettype
- move.l 14(a3),d0 ;rt_Name
- bsr putnam
- r4 addq #4,a5
- bra r1
- r2 rts
-
- *--------- ports -------------
-
- showprt lea pheader(a4),a0
- bsr puthead
- move.l SysBase(a4),a6
- lea 392(a6),a3 ;SysBase->PortList
- lea buffer,a5
- moveq #0,d5
- RECALL Forbid
- move.w #$4000,$dff09a
- sp2 move.l 0(a3),a3 ;mp_Node.ln_Next
- tst.l 0(a3)
- beq.s sp20
- bsr getpdata
- bra.s sp2
- sp20 tst.b tports(a4)
- beq.s sp15
- move.l SysBase(a4),a3
- move.l 276(a3),a3 ;sysbase->ThisTask
- lea 92(a3),a3 ;process->pr_MsgPort
- bsr getpdata
- move.l SysBase(a4),a2
- lea 406(a2),a2 ;sysbase->TaskReady
- sp11 move.l 0(a2),a2
- tst.l 0(a2)
- beq.s sp14
- lea 92(a2),a3 ;pr_MsgPort
- cmp.b #13,8(a2) ;ln_Type
- bne.s sp11
- bsr getpdata
- bra sp11
- sp14 move.l SysBase(a4),a2
- lea 420(a2),a2 ;sysbase->TaskWait
- sp12 move.l 0(a2),a2
- tst.l 0(a2)
- beq.s sp15
- lea 92(a2),a3 ;pr_MsgPort
- cmp.b #13,8(a2) ;ln_Type
- bne.s sp12
- bsr getpdata
- bra sp12
- sp15 move.w #-$4000,$dff09a
- CALL Permit,SysBase(a4)
- lea buffer,a5
- sp3 tst.b d5
- beq sp6
- move.l 0(a5),d0
- move.l d0,node(a4)
- bsr hexa
- move.l 4(a5),d0
- bsr putstr
- moveq #25,d1
- bsr tab
- move.b 8(a5),d0
- and.l #3,d0
- mulu #9,d0
- add.w #mp_flags,d0
- bsr putstrw
- move.b 9(a5),d3
- bsr bytedec
- move.b 14(a5),d3
- cmp.b #255,d3
- bne.s 1$
- move.w #toomuch,d0
- bsr putstrw
- bra.s 2$
- 1$ bsr bytedec
- 2$ move.l 10(a5),d0
- bsr getaskname2
- bsr newline
- lea 16(a5),a5
- subq.b #1,d5
- bra sp3
- sp6 rts
-
- getpdata move.l a3,0(a5)
- move.l 10(a3),4(a5) ;ln_Name
- move.b 14(a3),8(a5) ;mp_Flags
- move.b 15(a3),9(a5) ;mp_SigBit
- move.l 16(a3),10(a5) ;mp_SigTask
- moveq #0,d0
- movea.l 20(a3),a1 ;mp_MsgList
- sp10 movea.l 0(a1),a1
- cmpa.l #0,a1
- 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(a4),a0
- bsr puthead1
- lea resnam(a4),a0
- bsr puthead2
- move.l SysBase(a4),d5
- add.l #336,d5 ;SysBase->ResourceList
- bsr show
- rts
-
- *--------- devices -------------
-
- showdevs lea lheader(a4),a0
- bsr puthead1
- lea devnam(a4),a0
- bsr puthead2
- move.l SysBase(a4),d5
- add.l #350,d5 ;SysBase->DeviceList
- bsr show
- rts
-
- *-------- libraries -------------
-
- showlibs lea lheader(a4),a0
- bsr puthead1
- lea libnam(a4),a0
- bsr puthead2
- move.l SysBase(a4),d5
- add.l #378,d5 ;SysBase->LibList
-
- show lea buffer,a5
- clr.b entries(a4)
- CALL Forbid,SysBase(a4)
- move.l d5,a3
- sl1 move.l 0(a3),a3 ;lib_Node.ln_Next
- tst.l 0(a3)
- beq.s sl2
- addq.b #1,entries(a4)
- move.l a3,0(a5)
- move.l 10(a3),4(a5) ;ln_Name
- move.b 33(a3),8(a5) ;lib_OpenCnt
- move.b 21(a3),9(a5) ;lib_Version
- move.b 23(a3),10(a5) ;lib_Revision
- move.b 14(a3),11(a5) ;lib_Flags
- lea 12(a5),a5
- bra.s sl1
- sl2 RECALL Permit
-
- lea buffer,a5
- dl3 tst.b entries(a4)
- beq.s sl4
- move.l 0(a5),d0
- move.l d0,node(a4)
- 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(a4)
- bra.s dl3
- sl4 rts
-
- ;--------- Semaphores ---------
- semaphores lea semhead(a4),a0
- bsr puthead
- move.l SysBase(a4),a0
- move.l 532(a0),a1
- bsr.s 1$
- move.l intuibase(a4),a0
- cmp.w #36,20(a0)
- bge.s 5$
- move.l 1010(a0),a1
- bsr.s 1$
- 5$ rts
-
- 1$ move.w #$4000,$dff09a
- moveq #0,d5
- lea buffer,a2
- 8$ tst.l 0(a1)
- beq.s 4$
- move.l a1,(a2)+
- move.l $28(a1),(a2)+
- move.b $2d(a1),(a2)+
- move.b $f(a1),(a2)+
- move.l 10(a1),(a2)+
- move.l 0(a1),a1
- addq #1,d5
- bra.s 8$
-
- 4$ move.w #-$4000,$dff09a
- lea buffer,a2
- 6$ subq #1,d5
- bmi.s 7$
- move.l (a2)+,d0
- bsr hexa
- move.l (a2)+,d0
- bsr getaskname2
- moveq #24,d1
- bsr tab
- move.b (a2)+,d3
- addq #1,d3
- bsr plusmins
- move.b (a2)+,d3
- bsr plusmins
- move.l (a2)+,d0
- bsr putnam
- move.l 0(a1),a1
- bra.s 6$
- 7$ rts
-
- ;Remove a resident module from the list. Clears the rt_Matchword
- ;to avoid being found and reinserted during the next reset
- remresident bsr nodenam2
- cmp.b #'$',0(a5)
- bne.s 1$
- move.l a5,a0
- bsr readhex
- tst.b d7
- bne.s 2$
- 1$ move.l a5,a1
- CALL FindResident,SysBase(a4)
- tst.l d0
- beq fn5
-
- 2$ move.l SysBase(a4),a3
- move.l 300(a3),a3 ;SysBase->ResModules
-
- 8$ move.l (a3)+,d1
- beq fn5
- bpl.s 3$
- bclr #31,d1
- movea.l d1,a3
- bra.s 8$
- 3$ cmp.l d1,d0
- bne.s 8$
-
- 4$ move.l a3,a5
- 5$ tst.l (a5)+
- bgt.s 5$
-
- 6$ move.l d0,a1
- clr.w 0(a1) ;rt_MatchTag
- clr.l 22(a1) ;rt_Init
- clr.b 10(a1) ;rt_Flags
- move.l a5,d0
- sub.l a3,d0
- lsr #2,d0
- subq #1,d0
- lea -4(a3),a1
- 7$ move.l (a3)+,(a1)+
- dbf d0,7$
- rts
-
- ;find the first entry in the device-list
- ;returns a1 = pointer to first entry
-
- devinfo move.l dosbase(a4),a1
- move.l 34(a1),a1 ;dl_Root
- move.l 24(a1),a1 ;RootNode->rn_Info
- adda.l a1,a1
- adda.l a1,a1
- move.l 4(a1),a1 ;DosInfo->di_DevInfo
- rts
-
- ;unlock a file
- unlock tst.b fromfile(a4)
- bne ul6
- bsr readhex
- tst.b d7
- beq syntax
- move.l d0,remembr(a4)
- move.l d0,-(a7)
- moveq #-1,d6
- bsr of44
- tst.l remembr(a4)
- beq.s ul1
- move.w #unlerr,d0
- bsr putnamw
- bra ul4
- ul1 bsr ResumeOutput
- move.w #unl1,d0
- bsr putstrw
- move.l 0(a7),d0
- bsr getpath
- move.w #unltxt2,d0
- bsr putstrw
- bsr readline
- ori.b #$20,inputbuffer
- cmp.b #'y',inputbuffer
- bne.s ul5
- move.l 0(a7),d1
- CALL UnLock,dosbase(a4)
- ul5 bsr freefinfo
- ul4 addq #4,a7
- ul6 rts
- ;---------- Show all Locks------------
- locks moveq #0,d6
- bra.s of33
-
- ;---------- Open Files-----------
- openfiles moveq #1,d6
- of33 lea ofheader(a4),a0
- bsr puthead
- of55 move.l mytask(a4),a5
- move.l 184(a5),inputbuffer
- move.l #-1,184(a5) ;disable 'please insert..' requester
- of44 bsr allocfinfo
- bsr devinfo ;get pointer to devicelist
- move.l a1,a3
- of1 move.l a3,devicelock(a4)
- adda.l a3,a3
- adda.l a3,a3
- cmp.l #2,4(a3) ;DeviceList->dl_Type
- bne of2 ;2 = DLT_VOLUME
- move.l 40(a3),d0 ;dl_Name
- lsl.l #2,d0
- move.l d0,a2
- moveq #0,d3
- move.b (a2)+,d3
- subq #1,d3
- lea buffer,a5
- of22 move.b (a2)+,(a5)+ ;hack to access the 'RAM Disk" as
- dbf d3,of22 ;'RAM:' as the system may GURU
- move.b #':',(a5)+ ;with KS1.2
- clr.b 0(a5)
- cmp.l #'RAM ',buffer
- bne.s of5
- cmp.l #'Disk',buffer+4
- bne.s of5
- move.l #$4d3a0000,buffer+2 ;="M:"
- of5 move.l #buffer,d1
- move.l #-2,d2
- CALL Lock,dosbase(a4) ;get a lock to the device
- tst.l d0 ;'not mounted' if fails
- bne.s of6
- move.l #buffer,d0
- bsr putstr
- move.w #nomount,d0
- bsr putnamw
- bra of2
-
- of6 move.l d0,-(a7) ;d0 = FileLock
- lsl.l #2,d0
- move.l d0,a5
- CALL Forbid,SysBase(a4)
- lea buffer+40,a6 ;where to store the locks we find
- of4 move.l 0(a5),d0 ;fl_Link
- cmp.l #50,d0 ;zero or bogus ?
- ble 1$ ;exit loop
- tst d6 ;searching for a lock ?
- bpl.s 3$
-
- cmp.l remembr(a4),d0 ;yes, compare them
- bne.s 3$
- CALL Permit,SysBase(a4) ;exit if found
- clr.l remembr(a4)
- 2$ move.l (a7)+,d1
- CALL UnLock,dosbase(a4)
- bra quitof
-
- 3$ move.l d0,(a6)+ ;put lock into buffer
- clr.w (a6)+
- tst.b post_V34(a4)
- beq.s 5$
- bsr IsBcplLock ;hack for KS2.0, see if BPTR isn't
- bne.s 5$ ;really an APTR
- move.w #1,-2(a6)
- bra.s 4$
- 5$ lsl.l #2,d0 ;convert bptr into aptr
- 4$ move.l d0,a5
- bra.s of4 ;get next lock
-
- 1$ clr.l (a6)+ ;end of buffer marker
- CALL Permit,SysBase(a4)
- tst d6 ;just searching for a lock ?
- bmi of3 ;skip printing out info
-
- of45 lea buffer+40,a2 ;a2-> array of locks
- of46 move.l (a2)+,d0 ;get a lock
- beq of3 ;end of list ?
- tst.w (a2)+
- beq.s 2$
- lsr.l #2,d0
- 2$ move.l d0,d5
- lsl.l #2,d0 ;bptr -> aptr
- move.l d0,a5
- move.l 8(a5),d4 ;fl_Access
- move.l d5,d0
- bsr getfinfo ;get fileinfo
- move.l finfoptr(a4),a5
-
- tst.l d6
- beq.s of8
- bmi.s of8 ;looking for open files ?
- tst.l 4(a5) ;fib_DirEntryType
- bpl of46 ;not a file
- of8 move.l d5,d0
- move.l d0,node(a4)
- bsr hexa ;display lock
- move.w #access,d0 ;access mode
- cmp #-2,d4
- beq.s of7
- addq #8,d0
- of7 bsr putstrw
- tst.l 4(a5) ;size
- bmi.s of9
- move.w #longnix,d0
- bsr putstrw
- bra of10
- of9 move.l 124(a5),d0
- bsr longdec
- of10 move.l d5,d0 ;path and filename
- bsr getpath
- bra of46
-
- bsr newline
- of3 move.l (a7)+,d1
- CALL UnLock,dosbase(a4)
- of2 move.l 0(a3),a3
- cmpa.l #0,a3
- bne of1
- bsr freefinfo
- quitof move.l mytask(a4),a5
- move.l inputbuffer,184(a5)
- rts
-
- IsBcplLock movem.l d0/a0,-(a7)
- btst #0,d0
- bne.s 2$
- move.l d0,a0
- move.l 16(a0),d0
- cmp.l devicelock(a4),d0
- 2$ movem.l (a7)+,d0/a0
- rts
-
- ;---------- Dos Devices ----------
-
- devices lea ddheader(a4),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
- moveq #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.w #notfile,d0
- bsr putstrw
- dev8 tst.l 8(a1)
- beq.s dev6
- move.w #devload,d0
- bra.s dev5
- dev6 move.w #devnload,d0
- dev5 bsr putstrw
- 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.w #nomount,d0
- bsr putstrw
- move.w #dishelp,d0
- bra putnamw
- ldr1 move.l #buffer,d1
- CALL DeviceProc,dosbase(a4)
- tst.l d0
- beq.s ldr2
- move.l d0,a0
- move.l #31,dp_Type
- bra cons1
-
- ;display the current directory of all processes,
-
- currentdir lea cdheader(a4),a0
- bsr puthead
- bsr allocfinfo
- bsr getaskdat4
- beq cd7
- move.l d0,a5
- move.l a5,-(a7)
- bsr getaskdat3
- move.b d5,entries(a4)
- move.l 0(a7),a5
- cd2 tst.b entries(a4)
- beq.s cd6
- cmp.b #13,8(a5)
- bne.s cd5
- move.l 0(a5),a3
- move.l a5,-(a7)
- moveq #-1,d6
- move.l 152(a3),remembr(a4)
- bsr of55
- move.l (a7)+,a5
- tst.l remembr(a4)
- bne.s cd5
- move.l 0(a5),a3
- move.l a3,node(a4)
- bsr gettaskname
- moveq #21,d1
- bsr tab
- move.l 0(a5),a3
- move.l 152(a3),d0
- cd1 bsr getpath
- cd5 subq.b #1,entries(a4)
- lea 16(a5),a5
- bra.s cd2
- cd6 bsr freefinfo
- move.l (a7)+,a5
- bsr freetaskbuf
- cd7 rts
-
- ;Change the current directory setting of a process
-
- cd tst.b fromfile(a4)
- bne cd10
- bsr getstr
- move.l a0,-(a7)
- move.l #buffer,d1
- move.l #-2,d2
- CALL Lock,dosbase(a4)
- move.l (a7)+,a0
- tst.l d0
- bne cd16
- move.w #dnotf,d0
- bra putnamw
- cd16 move.l d0,remembr2(a4)
- move.l a0,-(a7)
- bsr allocfinfo
- move.l remembr2(a4),d0
- bsr getfinfo
- move.l finfoptr(a4),a5
- move.l (a7)+,a0
- tst.l 4(a5)
- bpl.s cd11
- move.w #notdir,d0
- bsr putnamw
- bra cd18
- cd11 bsr nodenam
- moveq.l #2,d7
- lea TRuNode(PC),a3
- 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 move.l 152(a5),d0
- beq.s cd13
- movem.l a5,-(a7)
- moveq #-1,d6
- move.l d0,remembr(a4)
- bsr of55
- move.l (a7)+,a5
- tst.l remembr(a4)
- bne.s cd18
- cd13 move.l 152(a5),d1
- move.l remembr2(a4),152(a5)
- move.l d1,remembr2(a4)
- cd12 beq.s cd14
- bsr ResumeOutput
- move.w #unltxt,d0
- bsr putstrw
- move.l remembr2(a4),d0
- bsr getpath
- move.w #unltxt2,d0
- bsr putstrw
- bsr readline
- ori.b #$20,inputbuffer
- cmp.b #'y',inputbuffer
- bne.s cd14
- cd18 move.l remembr2(a4),d1
- beq.s cd14
- CALL UnLock,dosbase(a4)
- cd14 bsr freefinfo
- cd10 rts
-
- ;Display the list of inputhandlers. It adds a dummy
- ;input handler, grabs the list header, and removes the handler
-
- inphand tst.b background(a4)
- bne.s inph1
- bsr installh
- inph1 move.l #500,d4
- lea InInterrupt(a4),a0
- inph2 tst.l 4(a0)
- beq.s inph3
- move.l 4(a0),a0
- dbf d4,inph2
- inph3 tst.b background(a4)
- bne.s inph4
- movem.l d4/a0,-(a7)
- bsr removeh
- movem.l (a7)+,d4/a0
- inph4 cmp.w #-1,d4
- bne.s inph5
- move.w #failed,d0
- bra putnamw
- inph5 move.l a0,-(a7)
- lea inheader(a4),a0
- bsr puthead
- move.l (a7)+,a5
- inph6 move.l 0(a5),a5
- tst.l 0(a5)
- beq.s inph7
- move.l a5,d0
- move.l d0,node(a4)
- bsr hexa
- move.l 14(a5),d0
- bsr hexa
- move.l 18(a5),d0
- bsr hexa
- move.b 9(a5),d3
- bsr plusmins
- move.l 10(a5),d0
- inph8 bsr putnam
-
- bra.s inph6
- inph7 rts
-
- ;get all screen pointers.
- ;result: d5=number of screens
- ; buffer+100 holds pointers.
-
- getscr lea scrheader(a4),a0
- bsr puthead
- getscr2 move.l d0,-(a7)
- moveq #0,d0
- CALL LockIBase,intuibase(a4)
- move.l intuibase(a4),a2
- move.l 60(a2),a2
- lea buffer+100,a1
-
- moveq #0,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.l d0,a0
- CALL UnlockIBase,intuibase(a4)
- move.l (a7)+,d0
- 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
- move.l d0,node(a4)
- move.l d0,a2
- bsr hexa
- move.w 12(a2),d0
- moveq #4,d3
- bsr longdecn
- moveq #'X',d0
- bsr putchar
- move.w 14(a2),d0
- bsr longdecn
- move.b 189(a2),d3
- bsr bytedec
- move.l (a1)+,a2
- move.l 22(a2),d0
- bsr putnam
- addq #1,d6
- dbf d5,sr2
- rts
- Screen
- ;display window addresses and titles
-
- windows clr.b bool(a4)
- windows1 bsr getscr2
- move.l d5,-(a7)
- lea wnheader(a4),a0
- bsr puthead
- move.l (a7)+,d5
- tst.b bool(a4)
- beq.s wn20
- move.l d5,-(a7)
- lea fohead(a4),a0
- bsr puthead
- move.l (a7)+,d5
- wn20 lea buffer+100,a3
- wn2 move.w #onscr,d0
- bsr putstrw
- move.l (a3)+,a2
- move.l 22(a2),d0
- bsr putnam
- move.l 4(a2),a1
- wn1 cmpa.l #0,a1
- beq.s wn3
- move.l a1,d0
- move.l d0,node(a4)
- bsr hexa
-
- move.l 86(a1),d0 ;wn->UserPort
- beq.s 1$
- move.l d0,a0
- move.l 16(a0),d0 ;SigTask
- 1$ bsr getaskname2
- moveq #20,d1
- bsr tab
- bsr putblank
-
- moveq #4,d3
- moveq #2,d2
- lea 4(a1),a0
- 2$ move.w (a0)+,d0
- bsr longdecn
- dbf d2,2$
- moveq #'X',d0
- bsr putchar
- move.w 10(a1),d0
- bsr longdecn
-
- move.l 32(a1),d0
- bsr putnam
-
- tst.b bool(a4)
- 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 moveq #0,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.w #scnofound,d0
- bra putnamw
- cs3 move.l -4(a2),a0
- CALL CloseScreen,intuibase(a4)
- rts
-
- ;close a specified window
- closewindow bsr getwnptr
- clw move.l a3,d0
- beq.s cwend
- cw3 tst.l 36(a3)
- beq.s cw8
- move.l 36(a3),a0
- move.w 28(a0),d0
- and.w #$4000,d0
- beq.s cw9
- move.l a3,a0
- CALL FreeSysRequest,intuibase(a4)
- rts
- cw9 move.l a3,a1
- CALL EndRequest,intuibase(a4)
- bra.s cw3
- cw8 move.l a3,a0
- moveq #0,d0
- CALL ModifyIDCMP,intuibase(a4)
- move.l a3,a0
- CALL CloseWindow,intuibase(a4)
- cwend rts
-
-
- getwnptr bsr getscr2
- moveq #1,d6
- cmp.b #'$',0(a0)
- bne.s cw1
- bsr readhex
- tst d7
- bne.s cwin
- bsr syntax
- bra.s cwerr
- cwin move.l d0,d4
- moveq #0,d6
- cw1 lea buffer+100,a2
- cw5 move.l (a2)+,a3
- move.l 4(a3),a3
- cw6 cmpa.l #0,a3
- beq.s cw4
- tst d6
- bne.s cw2
- cmp.l a3,d4
- beq.s cw10
- bra.s cw7
- cw2 move.l 32(a3),a1
- bsr strcmp
- tst d0
- beq.s cw10
- cw7 move.l 0(a3),a3
- bra.s cw6
- cw4 dbf d5,cw5
- move.w #winnofound,d0
- bsr putnamw
- cwerr suba.l a3,a3
- cw10 rts
-
- windowoff movem.l d1-d7/a0-a6,-(a7)
- bsr getscr2
- bsr cwin
- move.l a3,d1
- beq.s woff1
- bsr clw
- 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)+,a3
- move.l 4(a3),a3
- ctw6 cmpa.l #0,a3
- beq.s ctw4
- move.l 86(a3),a0
- move.l 16(a0),d1
- cmp.l d0,d1
- bne.s ctw7
- move.l d0,d1
- move.l a3,d0
- bsr windowoff
- move.l d1,d0
- bra ctw0
- ctw7 move.l 0(a3),a3
- bra.s ctw6
- ctw4 dbf d5,ctw1
- movem.l (a7)+,d1-d7/a0-a6
- rts
-
- ;Change the font of a specified Window
-
- setfont bsr nodenam
- tst.b 0(a5)
- beq syntax
- move.l a5,a3
- 1$ cmp.b #33,(a3)+
- bge.s 1$
- tst.b -1(a3)
- beq syntax
- clr.b -1(a3)
-
- lea dummy,a0
- move.l a5,0(a0)
- move.b procnum(a4),d0
- ext.w d0
- move.w d0,4(a0)
- clr.w 6(a0)
- CALL OpenFont,gfxbase(a4)
- tst.l d0
- bne.s 2$
- lea diskfont(a4),a1
- CALL OpenLibrary,SysBase(a4)
- move.l d0,d5
- beq.s 4$
- move.l d0,a6
- lea dummy,a0
- RECALL OpenDiskFont
- move.l d0,d4
- move.l d5,a1
- CALL CloseLibrary,SysBase(a4)
- move.l d4,d0
- bne.s 2$
- 4$ move.w #fonterr,d0
- bsr putstrw
- move.l dummy,d0
- bra putnam
- 2$ move.l d0,-(a7)
- move.l a3,a0
- bsr kllblnks
- bsr getwnptr
- move.l (a7)+,a0
- move.l a3,d1
- bne.s 5$
- move.l a0,a1
- CALL CloseFont,gfxbase(a4)
- bra.s 3$
- 5$ move.l 50(a3),a1
- CALL SetFont,gfxbase(a4)
- move.l a3,a0
- CALL RefreshWindowFrame,intuibase(a4)
- 3$ rts
-
-
- ;display windows and associated fonts
-
- windowfonts move.b #1,bool(a4)
- bra windows1
-
- ;display loaded font names and definitions
-
- fonts lea fohead(a4),a0
- bsr puthead
- move.l gfxbase(a4),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
- move.l d0,node(a4)
- bsr hexa
- move.w 30(a1),d3
- bsr bytedec
- move.w 20(a1),d3
- bsr bytedec
- move.w 24(a1),d3
- bsr bytedec
- move.w #romfnt,d0
- btst #1,23(a1)
- beq.s fod1
- addq #diskfnt-romfnt,d0
- fod1 bsr putstrw
- move.w #ffixed,d0
- btst #5,23(a1)
- beq.s 1$
- addq #fprop-ffixed,d0
- 1$ bsr putstrw
- 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 getfrac
- tst.b d7
- bne.s st1
- move.w #whattime,d0
- bsr putstrw
- move.l timeoutm(a4),d0
- move.l #100000,d1
- bsr div
- moveq #0,d1
- move.b timeout(a4),d1
- mulu #10,d1
- add.l d1,d0
- bne.s 1$
- move.w #timenotset,d0
- bra putnamw
- 1$ bsr putfrac
- bra newline
-
- st1 divs #10,d2
- move.b d2,timeout(a4)
- swap d2
- ext.l d2
- moveq #0,d3
- subq #1,d2
- bmi.s 1$
- 2$ add.l #100000,d3
- dbf d2,2$
- 1$ move.l d3,timeoutm(a4)
- rts
- syntax move.w #synerr,d0
- sy1 bra putnamw
-
- ;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(a4)
- nodenam2 bsr kllblnks
- move.l a0,a5
- gno1 cmp.b #10,(a0)+
- bne.s gno1
- move.b #0,-1(a0)
- rts
-
- zerotimer bsr nodenam
- moveq.l #2,d7
- lea TRuNode(PC),a3
- bsr findnam
- tst.b d7
- beq.s 1$
- bsr gettimeentry
- lea usedtime,a0
- clr.l 0(a0,d0)
- 1$ 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 tst.b fromfile(a4)
- beq.s cancel1
- rts
- cancel1 clr.l remembr(a4) ;used for CLI stdio
- clr.l remembr2(a4)
- clr.b bool(a4)
- bsr nodenam
- testagain moveq.l #1,d7
- lea TReNode(PC),a3
- bsr findnam
- tst.b d7
- bne.s canok
- cnerr move.w #stperr,d0
- bra putnamw
-
- canok move.l d0,a1 ;d0=task
- move.l d0,pointer(a4)
- cmp.b #1,8(a1) ;TASK ?
- bne.s isproc
- CALL RemTask,SysBase(a4)
- move.l pointer(a4),d0
- bsr closeports
- move.l pointer(a4),d0
- bra closetskwin
-
- isproc movem.l d0-d7/a0-a6,-(a7)
- moveq #-1,d0 ;needed for recursive killing tasks
- CALL AllocSignal,SysBase(a4)
- moveq #0,d1
- bset d0,d1
- move.l d1,cancelbit(a4)
- move.l d0,cancelbnum(a4)
- movem.l (a7)+,d0-d7/a0-a6
-
- moveq #0,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(a4) ;yes,get Cli-Window locks
- move.l 56(a2),remembr2(a4)
- bra dosreturn
- wascreproc tst.b bool(a4) ;it is not a CLI, ask what to do
- bne unload
- move.b #3,bool(a4)
- bsr ResumeOutput
- move.w #canerr0,d0 ;ask for Workbench
- bsr putstrw
- bsr readline
- cmp.b #'y',inputbuffer
- beq.s andagain
- move.b #2,bool(a4)
- bsr ResumeOutput
- move.w #canerr1,d0 ;ask for unload
- bsr putstrw
- bsr readline
- cmp.b #'y',inputbuffer
- bne.s andagain
- move.b #1,bool(a4)
- andagain move.l pointer(a4),d0
- moveq.l #1,d7
- lea TReNode(PC),a3
- bsr tstnode
- tst d5
- beq cnerr
- bra canok
-
- unload move.l 128(a1),d4 ;get Segmentlist
- beq.s unl3
- lsl.l #2,d4
- move.l d4,a3
- cmp.l #100,0(a3)
- bpl.s ulerr
- move.l 12(a3),d4
- unl3 tst.l d4
- bne.s unl4
- ulerr move.w #unloaderr,d0 ;no Segments !?
- bra putnamw
-
- unl4 cmp.b #3,bool(a4) ;Workbench Task
- bne.s unl2
- move.l a1,-(a7)
- moveq #40,d0 ;build a copy of the
- move.l #$10000,d1 ;Workbench startup-message
- CALL AllocMem,SysBase(a4)
- move.l d0,startmess(a4)
- 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(a4),a1
- CALL FindPort,SysBase(a4)
- movem.l (a7)+,a0-a1
- move.l d0,14(a0)
- bne.s unl2
- move.w #noworkbench,d0
- bra putnamw
-
- unl2 cmp.b #1,bool(a4)
- bne.s dosreturn
- move.l a1,-(a7) ;unload process manualy
- move.l d4,d1
- CALL UnLoadSeg,dosbase(a4)
- move.l (a7)+,a1
-
- dosreturn move.l 140(a1),savedat(a4) ;Processnumber
- dosret1 move.w #$4000,$dff09a
- move.l 54(a1),a3
- move.l #endtask,0(a3)
- tst.b gotguru(a4)
- bne.s 1$
- tst.b bool(a4)
- bne.s 1$
- move.b #2,106(a1) ;ignore messages
- 1$ cmp.b #4,15(a1) ;if waiting
- bne.s doswait
- move.l a1,d4
- CALL Remove,SysBase(a4)
- move.l d4,a1
- lea 406(a6),a0 ; activate the task
- RECALL AddHead
- move.l d4,a1
-
- doswait move.w #-$4000,$dff09a
-
- tst.b bool(a4)
- bne.s endnodos
- tst.l d5
- beq.s 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(a4),d0
- CALL Wait,SysBase(a4)
- movem.l (a7)+,d0-d7/a0-a6
- tst.b gotguru(a4)
- bne.s endnodos
- moveq #0,d5
- bra dosret1
-
- endcanc move.l a1,-(a7)
- move.l remembr(a4),d1 ;close CLI-Window
- beq.s ecan1 ;if any
- CALL Close,dosbase(a4)
- ecan1 move.l remembr2(a4),d1
- beq.s ecan2
- CALL Close,dosbase(a4)
- ecan2 move.l (a7)+,a1
-
- move.l savedat(a4),d0 ;remove Task from
- move.l dosbase(a4),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 a1,d0
- bsr closeports
- move.l cancelbnum(a4),d0 ;remove our Signal
- CALL FreeSignal,SysBase(a4)
- rts
-
- ;This Code is (hopefully) executed by the Process we want
- ;to kill
-
- endtask 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+dataarea
- bne.s et0
- movea.l mytask+dataarea(PC),a1
- move.l cancelbit+dataarea(PC),d0 ;signal Xoper it
- CALL Signal,_SysBase(PC) ;died
- et0 cmp.b #3,bool+dataarea ;Workbench Process ?
- bne.s et1
- CALL Forbid,_SysBase(PC)
- move.l startmess(a4),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),a3
- bsr findnam
- tst.b d7
- bne.s frok
- frerr move.w #stperr,d0
- bra putstrw
- frok move.l d0,a1
- cmp.b #13,8(a1)
- beq.s 1$
- cmp.b #1,8(a1)
- bne.s frerr
- 1$ move.w #$4000,$dff09a
- CALL Remove,SysBase(a4)
- move.w #-$4000,$dff09a
- move.l d0,a1
- move.l d0,a5
- lea stplist(a4),a0
- RECALL AddHead
- add.b #4,15(a5)
- rts
- ;put the task back on its list
- warm bsr nodenam
- cmp.b #'$',0(a5)
- bne.s 1$
- move.l d7,d2
- move.l a5,a0
- bsr readhex
- tst.b d7
- beq.s 1$
- move.l stplist(a4),a3
- 3$ tst.l 0(a3)
- beq.s 2$
- cmp.l a3,d0
- beq.s waok
- move.l 0(a3),a3
- bra.s 3$
- 1$ lea stplist(a4),a0
- movea.l a5,a1
- moveq #0,d7
- bsr fn4
- tst.b d7
- bne.s waok
- 2$ move.w #waerr,d0
- bra putstrw
- waok move.w #$4000,$dff09a
- move.l d0,a1
- CALL Remove,SysBase(a4)
- 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(a4),a0
- RECALL AddTail
- move.l d0,a1
- subq.b #4,15(a5)
- move.w #-$4000,$dff09a
- move.l 18(a5),d0
- and.l 26(a5),d0
- beq.s wa2
- movea.l a5,a1
- RECALL Signal
- wa2 rts
-
- ;show register values of a task
-
- regs bsr nodenam
- moveq.l #2,d7
- lea TRuNode(PC),a3
- bsr findnam
- tst.b d7
- bne.s 1$
- rts
- 1$
-
-
-
-
- ;show the hunks of a process
- hunks bsr nodenam
- moveq.l #2,d7
- lea TRuNode(PC),a3
- bsr findnam
- tst.b d7
- bne.s hu1
- rts
- hu1 move.l d0,a5
- cmp.b #13,8(a5)
- beq.s hu2
- move.w #noprocs,d0
- bra putnamw
- hu2 move.l 128(a5),d0
- beq.s noprogload
- lsl.l #2,d0
- move.l d0,a3
- move.l 12(a3),d1
- beq.s hu3
- cmp.l #100,0(a3)
- ble.s 1$
- move.w #unloaderr,d0
- bra.s huxx
- 1$ move.w #segloaded,d0
- bsr putnamw
- bra hu5
- hu3 move.l 172(a5),d1
- bne.s hu4
- noprogload move.w #notload,d0
- huxx bra putnam
- hu4 move.w #cliprocs,d0
- bsr putnamw
- lsl.l #2,d1
- move.l d1,a5
- move.l 60(a5),d1
- beq.s noprogload
- move.w #procloaded,d0
- bsr putstrw
- move.l 16(a5),d0
- bsr putbcpl
- bsr newline
- hu5 lea hunkheader(a4),a0
- bsr puthead
- moveq #0,d5
- hu6 move.l d5,d3
- bsr bytedec
- addq #1,d5
- move.l d1,d0
- bsr hexa
- lsl.l #2,d1
- move.l d1,a5
- move.l d1,d0
- addq.l #4,d0
- bsr hexa
- move.l -4(a5),d0
- moveq #1,d3
- bsr longdec
- move.l #'($',d0
- bsr putlongascii
- move.l -4(a5),d0
- bsr hexa
- moveq #')',d0
- bsr putchar
- bsr newline
- move.l 0(a5),d1
- bne.s hu6
- rts
-
- ;change the priority of a node
- pri bsr getnum
- tst.b d7
- beq syntax
- move.b d2,newpri(a4)
- bsr nodenam2
- moveq.l #8,d7
- lea TRuNode(PC),a3
- bsr findnam
- tst.b d7
- beq.s pi1
- move.l d0,a1
- cmp.b #13,8(a1)
- beq.s tp2
- cmp.b #1,8(a1)
- beq.s tp2
- move.b newpri(a4),9(a1)
- cmp.l #SemNode,a3
- ble.s pi2
- move.w #listerr,d0
- bra putnamw
- pi2 CALL Forbid,SysBase(a4)
- RECALL Remove
- move.l d0,a1
- move.l a3,a0
- move.l 0(a0),d6
- lea 0(a6,d6),a0
- RECALL Enqueue
- RECALL Permit
- pi1 rts
-
- ;modify a task's priority
-
- taskpri bsr getnum
- tst.b d7
- beq syntax
- move.b d2,newpri(a4)
- bsr nodenam
- moveq.l #2,d7
- lea TRuNode(PC),a3
- bsr findnam
- tst.b d7
- beq.s tp1
- move.l d0,a1
- tp2 move.b newpri(a4),d0
- tp3 CALL SetTaskPri,SysBase(a4)
- tp1 rts
-
- ;set the priority of our task
-
- mypri bsr getnum
- tst.b d7
- beq syntax
- move.l SysBase(a4),a1
- move.l 276(a1),a1
- move.l d2,d0
- bra.s tp3
-
- ;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),a3
- bsr findnam
- tst.b d7
- beq.s pi1
- move.l d0,a1
- move.l savedat,d0
- and.l 18(a1),d0
- CALL Signal,SysBase(a4)
- rts
-
- ;set up a list of tasknames which should't be displayed
-
- hide cmp.b #10,0(a0)
- bne.s hid5
- bra syntax
- hid5 lea hidestart(a4),a2
- move.l a2,d3
- hid0 tst.l 0(a2)
- beq.s hid1
- move.l 0(a2),a2
- lea 4(a2),a1
- bsr strcmp
- tst d0
- beq.s hid2
- move.l a2,d3
- bra.s hid0
- hid1 move.l a0,a3
- bsr strlen2
- addq #5,d0
- move.l #65536,d1
- CALL AllocMem,SysBase(a4)
- tst.l d0
- beq.s hid4
- move.l d0,a1
- move.l d0,0(a2)
- addq #4,a1
- hid3 cmp.b #10,0(a3)
- beq.s hid4
- move.b (a3)+,(a1)+
- bra.s hid3
- hid4 rts
- hid2 move.l d3,a3
- move.l 0(a2),0(a3)
- freehidden lea 4(a2),a0
- bsr strlen
- addq #5,d0
- move.l a2,a1
- CALL FreeMem,SysBase(a4)
- rts
-
- freehidmem move.l hidestart(a4),a3
- fhm0 move.l a3,d0
- beq.s fhm1
- move.l a3,a2
- move.l 0(a2),a3
- bsr freehidden
- bra fhm0
- fhm1 rts
-
- ;set up an ALIAS list
- alias cmp.b #10,0(a0)
- beq showalias
- bsr strbuf
- move.l a0,a5
- lea buffer,a0
- bsr strlen
- tst.l d0
- beq syntax
-
- moveq #1,d1
- cmp d1,d0
- bne.s 5$
- lea params(a4),a0
- moveq #parmnum-1,d1
- move.b buffer,d2
- 6$ cmp.b (a0)+,d2
- dbeq d1,6$
- tst.w d1
- bmi.s 5$
- move.w #aliaserr,d0
- bsr putstrw
- move.w #params,d0
- bsr putstrw
- move.w #aliaserr2,d0
- bra putnamw
-
- 5$ move.l d0,d5
- move.l a5,a0
- adda.l d0,a0
- bsr kllblnks
- move.l a5,-(a7)
- bsr findcmd
- move.l (a7)+,a5
- tst.l d2
- bmi syntax
- move.l a5,a0
- bsr strbuf
-
- addq #6,d5
- move.l d5,d0
- move.l #65536,d1
- CALL AllocMem,SysBase(a4)
- tst.l d0
- beq.s 1$
-
- move.l aliaslist(a4),d1
- bne.s 2$
- move.l d0,aliaslist(a4)
- bra.s 3$
- 2$ move.l d1,a0
- move.l 0(a0),d1
- bne.s 2$
- move.l d0,0(a0)
-
- 3$ move.l d0,a0
- move.b d2,4(a0)
-
- lea 5(a0),a0
- lea buffer,a1
- 4$ move.b (a1)+,(a0)+
- bne.s 4$
- 1$ rts
-
- showalias lea alhead(a4),a0
- bsr puthead
- move.l aliaslist(a4),d0
- beq.s 1$
- 2$ move.l d0,a5
- addq #5,d0
- bsr putstr
- move.w #15,d1
- bsr tab
- move.w #equal,d0
- bsr putstrw
- move.b 4(a5),d0
- ext.w d0
- bsr getcmdptr
- bsr putnam
- move.l 0(a5),d0
- bne.s 2$
- 1$ rts
-
- freealias move.l aliaslist(a4),a3
- 1$ move.l a3,d0
- beq.s 2$
- move.l a3,a2
- move.l 0(a2),a3
- lea 5(a2),a0
- bsr strlen
- addq #6,d0
- move.l a2,a1
- CALL FreeMem,SysBase(a4)
- bra 1$
- 2$ rts
-
- getcmdptr move.l a0,-(a7)
- lea commds(a4),a0
- 2$ tst d0
- beq.s 1$
- 3$ tst.b (a0)+
- bne.s 3$
- subq #1,d0
- bra.s 2$
- 1$ move.l a0,d0
- move.l (a7)+,a0
- rts
-
-
- ;'flushlibs'
- flush move.l #$ffffff,d0
- moveq #0,d1
- CALL AllocMem,SysBase(a4)
- flsh1 rts
-
- ;display library->lib_IDString
- info bsr nodenam2
- moveq.l #2,d7
- lea DevNode(PC),a3
- bsr findnam
- tst.b d7
- beq.s flsh1
- move.l d0,a0
- move.l 24(a0),d0
- beq.s if1
-
- move.l #160,d1
- move.l d0,a0
- if3 tst.b (a0)+
- dbeq.s d1,if3
- beq.s if2
-
- if1 move.w #noinfo,d0
- bsr putstrw
- move.l a5,d0
- if2 bra putnam
-
- capture move.l SysBase(a4),a1
- lea 42(a1),a0
- moveq #2,d6
- lea coldtxt(a4),a3
- cap0 move.l a3,d0
- bsr putstr
- move.l 0(a0),d0
- bne.s cap1
- move.w #unset,d0
- bsr putstrw
- bra cap2
- cap1 bsr hexa
- cap2 bsr newline
- lea 15(a3),a3
- addq #4,a0
- dbf d6,cap0
-
- move.w #kicktxt,d0
- bsr putstrw
- move.l 546(a1),a0
- cmpa.l #0,a0
- bne.s kickm3
- move.w #unset,d0
- bra putnamw
- kickm3 move.l a0,-(a7)
- bsr newline
- lea kickhead(a4),a0
- bsr puthead
- move.l (a7)+,a0
- kickm0 move.l a0,d0
- beq kickm4
- bpl.s kickm1
- bclr #31,d0
- move.l d0,a0
- bra.s kickm0
- 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
- addq #8,a2
- dbf d6,kickm2
- move.l 0(a0),a0
- bra kickm0
- kickm4 rts
-
- clrcold move.l SysBase(a4),a0
- clr.l 42(a0)
- bra.s chksum
- clrcool move.l SysBase(a4),a0
- clr.l 46(a0)
- bra.s chksum
- clrwarm move.l SysBase(a4),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
-
- ;Save the command line to be repeated. If this line doesn't produce
- ;any output, don't repeat it at all
- repeatcmd tst.w repeat(a4)
- bne.s 2$
- move.w repeatlen(a4),d0
- subq #7,d0
- move.w d0,repeatlen(a4)
- lea repeatbuffer,a1
- lea dummy,a2
- move.w d0,d1
- ext.l d1
- 1$ move.b 0(a0),(a1)+
- move.b (a0)+,(a2)+
- dbf d1,1$
-
- clr.l lastprinted(a4)
- clr.b printed(a4)
- move.w #1,repeat(a4)
- bsr cli
- tst.b printed(a4)
- beq.s 2$
- bsr starttimer
- rts
- 2$ clr.w repeat(a4)
- rts
-
- ;save the parameters from a 'window x y width height' call
- setwindow tst.b fromfile(a4)
- bne.s wiw1
- wiw3 move.w #wiwerr,d0
- bra putnamw
- wiw1 lea window_l(a4),a3
- moveq #3,d5
- wiw0 bsr getnum
- tst d7
- beq.s wiw2
- move.w d2,0(a3)
- addq #2,a3
- dbf d5,wiw0
- wiw2 rts
-
- iconpos bsr getnum
- tst d7
- beq.s 1$
- move.w d2,icnwindow
- bsr getnum
- tst d7
- beq.s 1$
- move.w d2,icnwindow+2
- 1$ rts
-
- ;display ExecBase->LastAlert
- lastalert movem.l $100,d1-d2
- tst.l d1
- bne.s al1
- move.l SysBase(a4),a0
- movem.l 514(a0),d1-d2
- al1 move.w #gurutxt,d0
- bsr putstrw
- move.l d1,d0
- bsr hexa
- subq.l #1,ptr
- moveq #'.',d0
- bsr putchar
- move.l d2,d0
- bsr hexa
- bra newline
-
- ;test if 'on' or 'off' was entered
- onoff bsr kllblnks
- lea onstr(a4),a1
- bsr strcmp
- tst d0
- bne.s 1$
- bset.b #0,0(a2)
- bra.s 3$
- 1$ lea offstr(a4),a1
- bsr strcmp
- tst d0
- bne.s 2$
- clr.b 0(a2)
- bra.s 3$
- 2$ bchg.b #0,0(a2)
- 3$ rts
-
- ;toggle TaskInfo
- taskinfo lea tinfo(a4),a2
- bra.s onoff
-
- ;toggle CLI-Commands
- clicmd lea cmdcli(a4),a2
- bra.s onoff
-
- ;toggle task-header display on/off
- nohead lea headon(a4),a2
- bra.s onoff
-
- ;toggle hide entries on/off
- hidden lea hideoff(a4),a2
- bra.s onoff
-
- ;toggle sort on/off
- sort lea sorton(a4),a2
- bra.s onoff
-
- ;toggle task-ports display on/off
- taskports lea tports(a4),a2
- bra.s onoff
-
- ;toggle CPUSE task list
- usage lea usageflag(a4),a2
- bra.s onoff
-
- ;Open a library
- openlib bsr nodenam2
- move.l a5,a1
- moveq #0,d0
- CALL OpenLibrary,SysBase(a4)
- tst.l d0
- beq fn5
- opli1 rts
-
-
- ;close it
- closelib bsr nodenam2
- moveq #0,d7
- lea LibNode(PC),a3
- bsr findnam
- tst.b d7
- beq.s opli1
- move.l d0,a1
- CALL CloseLibrary,SysBase(a4)
- rts
-
- remnode bsr nodenam2
- moveq #7,d7
- lea TReNode(PC),a3
- bsr findnam
- tst.b d7
- beq.s 1$
- CALL Disable,SysBase(a4)
- move.l d0,a1
- RECALL Remove
- RECALL Enable
- 1$ rts
-
- remport bsr nodenam2
- moveq #0,d7
- lea PorNode(PC),a3
- bsr findnam
- tst.b d7
- beq.s 1$
- move.l d0,a1
- move.b #2,14(a1)
- CALL RemPort,SysBase(a4)
- 1$ rts
-
- remintserver
- move.l a0,-(a7)
- bsr readhex
- tst.b d7
- beq syntax
- move.l d0,d4
- moveq #1,d6
- bsr findint
- move.l (a7)+,a5
- tst d5
- bpl.s 1$
- bra fn5
- 1$ tst.b 0(a3,d1)
- bne.s 2$
- move.w #nintrserv,d0
- bra putnamw
- 2$ move.l d4,a1
- move.w d1,d0
- CALL RemIntServer,SysBase(a4)
- rts
-
- closeports movem.l d1-d6/a0-a6,-(a7)
- move.l d0,d6
- move.l SysBase(a4),a3
- lea 392(a3),a3
- 1$ move.l 0(a3),a3
- tst.l 0(a3)
- beq.s 2$
- cmp.l 16(a3),d6
- bne.s 1$
- move.b #2,14(a1)
- move.l a3,a1
- CALL RemPort,SysBase(a4)
- bra.s 1$
- 2$ movem.l (a7)+,d1-d6/a0-a6
- rts
-
- ;end Xoper but stay in background
- 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(a4)
- bne.s cleanit
- move.b #1,background(a4)
- bsr installh
- cleanit move.l infile(a4),d1
- beq.s ib1
- CALL Close,dosbase(a4)
- clr.l infile(a4)
- clr.b fromfile(a4)
- ib1 clr.b running(a4)
- bsr killpage
- bsr freeblank
- tst.l wnptr(a4)
- beq.s 5$
- tst.b ownscreen(a4)
- bne.s 6$
- move.l wnptr(a4),a0
- tst.b post_V34(a4)
- beq.s 7$
- move.l minwsize(a4),d0
- cmp.w 10(a0),d0
- bgt.s 7$
- swap d0
- cmp.w 8(a0),d0
- beq.s 6$
- 7$ move.l 4(a0),window_l(a4)
- move.l 8(a0),window_w(a4)
- 6$ move.l wnptr(a4),a0
- CALL CloseWindow,intuibase(a4)
- clr.l intuimsg(a4)
- clr.l wnptr(a4)
- 5$ move.l screenptr(a4),d0
- beq.s 4$
- move.l d0,a0
- CALL CloseScreen,intuibase(a4)
- clr.l screenptr(a4)
-
- move.l realstack(a4),a7
-
- 4$ tst.b iconifyon(a4)
- beq.s 1$
- jsr iconify
- bra.s 2$
-
- 1$ move.l #(1<<mysignal),d0
- or.l trapsignal(a4),d0
- CALL Wait,SysBase(a4)
- 2$ move.b #1,running(a4)
- and.l trapsignal(a4),d0
- beq.s 3$
- move.b #1,gotguru(a4)
- 3$ bra restart
-
- ;fill all unused memory-chunks with a longword
- clear moveq #0,d0
- cmp.b #10,0(a0)
- beq.s clr5
- bsr readhex
- tst.b d7
- beq syntax
- clr5 move.l SysBase(a4),a0
- clr.l parmtxt(a4)
- lea 322(a0),a0
- move.w #$4000,$dff09a
- clr1 move.l 0(a0),a0
- tst.l 0(a0)
- beq.s clr6
- move.l 16(a0),a1
- clr2 tst.l 0(a1)
- beq.s clr1
- addq.l #1,parmtxt(a4)
- move.l 4(a1),d1
- subq.l #8,d1
- ble.s clr31
- lsr.l #2,d1
- subq.l #1,d1
- bmi.s clr31
- lea 8(a1),a2
- clr3 move.l d0,(a2)+
- dbf d1,clr3
- clr31 move.l 0(a1),a1
- bra.s clr2
- clr6 move.w #-$4000,$dff09a
- move.l parmtxt(a4),d0
- bsr longdec
- move.w #clrtxt,d0
- bra putnamw
-
- ;change the number of maximum lines in the history buffer
- historylines
- bsr getnum
- tst.b d7
- beq syntax
- move.w d2,maxhlines(a4)
- move.w hnum(a4),d0
- 1$ cmp.w maxhlines(a4),d0
- ble.s 2$
- bsr remhistline
- subq #1,d0
- bra.s 1$
- 2$ move.l history+8(a4),curhist(a4)
- move.w d0,hnum(a4)
- rts
-
- ;set the minimum number of characters a input line
- ;must have to be added to the history buffer
- historylength
- bsr getnum
- tst.b d7
- beq syntax
- tst.b d2
- bne.s 1$
- addq #1,d2
- 1$ move.w d2,minnumchars(a4)
- rts
- ;display all lines in the history buffer
- showhistory move.l history(a4),a5
- moveq #1,d5
- 1$ tst.l 0(a5)
- beq.s 2$
- move.l d5,d3
- bsr bytedec
- move.w 8(a5),d0
- ext.l d0
- lea 10(a5),a0
- lea inputbuffer,a1
- CALL CopyMem,SysBase(a4)
- move.w 8(a5),d0
- lea inputbuffer,a1
- clr.b 0(a1,d0.w)
- move.l a1,d0
- bsr putnam
- addq #1,d5
- move.l 0(a5),a5
- bra.s 1$
- 2$ rts
-
- ;set the maximum lines the output buffer may hold
- outputlines bsr getnum
- tst.b d7
- beq syntax
- moveq #100,d3
- tst.l d2
- bmi.s 2$
- cmp.l d3,d2
- bge.s 1$
- 2$ move.l d3,d2
- 1$ move.l d2,maxlines(a4)
- rts
-
- ;find a named node
- ;d7 = number of lists to search through
- ;a3 = pointer to the first entry in the
- ; list-offset-table
- ;a5 = pointer to name
- ;returns:
- ;d7 = TRUE/FALSE 1/0
- ;d0 = node
-
- findnam tst.b 0(a5)
- bne.s 1$
- move.w #nameerr,d0
- bsr putnamw
- bra fnerr
- 1$ 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(a4),a0
- adda.l 0(a3),a0
- move.l a5,a1
- fn4 CALL FindName,SysBase(a4)
- tst.l d0
- bne.s fn1
- addq #4,a3
- dbf d7,fn2
- fn5 move.w #namerr,d0
- bsr putstrw
- move.l a5,d0
- bsr putnam
- fnerr clr.b d7
- rts
- fn1 move.b procnum(a4),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 tst.b fromfile(a4)
- bne.s illegalhex
- move.l d0,d1
- btst #0,d1
- beq.s inrange
- move.w #adrerr,d0
- bsr putnamw
- illegalhex moveq #0,d5
- rts
- inrange movem.l d7/a3,-(a7)
- cmp.l #TRuNode,a3
- bne.s inrange1
- move.l SysBase(a4),a0
- cmp.l 276(a0),d0
- beq.s nodefound
- subq #1,d7
- addq #4,a3
- inrange1 move.w #$4000,$dff09a
- getlist move.l SysBase(a4),a0
- add.l 0(a3),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 addq #4,a3
- dbf d7,getlist
- move.w #-$4000,$dff09a
- movem.l d0/d7/a3,-(a7)
- bsr ResumeOutput
- move.w #noderr,d0
- bsr putnamw
- bsr readline
- movem.l (a7)+,d0/d7/a3
- cmp.b #'y',inputbuffer
- beq.s nodefound1
- moveq #0,d5
- movem.l (a7)+,d7/a3
- rts
- nodefound move.w #-$4000,$dff09a
- nodefound1 move.b #1,d5
- etst movem.l (a7)+,d7/a0
- rts
-
- ;allocate FileInfoBlock
- allocfinfo addq.b #1,finfopen(a4)
- bne.s 1$
- move.l #260,d0
- moveq #0,d1
- CALL AllocMem,SysBase(a4)
- move.l d0,finfoptr(a4)
- 1$ rts
-
- ;free FileInfoBlock
- freefinfo subq.b #1,finfopen(a4)
- bpl.s 1$
- move.l #260,d0
- move.l finfoptr(a4),d1
- beq.s 1$
- move.l d1,a1
- CALL FreeMem,SysBase(a4)
- clr.l finfoptr(a4)
- 1$ rts
-
- ;Examine ,d0=Lock
- getfinfo move.l d0,d1
- move.l finfoptr(a4),d2
- CALL Examine,dosbase(a4)
- 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
- beq.s 1$
- CALL DupLock,dosbase(a4)
- 1$ lea out,a3
- clr.b -(a3)
- gp0 move.l d0,-(a7)
- bsr getfinfo
- move.l finfoptr(a4),a0
- move.l 4(a0),d4
- addq #8,a0
- bsr strlen
- lea -1(a3),a5
- tst.l d4
- bmi.s nodir
- move.b #'/',-(a3)
- nodir subq #1,d0
- bmi.s nofnam
- gp1 move.b 0(a0,d0),-(a3)
- dbf d0,gp1
- nofnam move.l 0(a7),d1
- CALL ParentDir,dosbase(a4)
- move.l d0,d4
- move.l (a7)+,d1
- beq.s 2$
- CALL UnLock,dosbase(a4)
- 2$ move.l d4,d0
- bne.s gp0
- cmp.b #'/',0(a5)
- bne.s gp2
- move.b #':',0(a5)
- gp2 move.l a3,d0
- bsr putnam
- movem.l (a7)+,d1-d7/a0-a6
- rts
-
- strlen move.l a0,-(a7)
- moveq #-1,d0
- strl2 addq.l #1,d0
- tst.b (a0)+
- bne.s strl2
- move.l (a7)+,a0
- rts
- strlen2 move.l a0,-(a7)
- move.l #-1,d0
- strl22 addq.l #1,d0
- cmp.b #10,(a0)+
- bne.s strl22
- 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 #$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(a4)
- 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 moveq #0,d2
- move.l d2,d3
- move.l d2,d6
- move.l d2,d7
- cmp.b #'-',0(a0)
- bne.s gn1
- addq #1,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 #1,d7
- and.b #$f,d3
- muls #10,d2
- add.l d3,d2
- bra.s gn1
- gn2 tst.b d6
- beq.s gn3
- neg.l d2
- gn3 tst.b d7
- bne.s gn4
- subq #1,a0
- gn4 rts
-
- getfrac cmp.b #'.',0(a0)
- bne.s 2$
- lea 1(a0),a0
- bra.s 3$
- 2$ bsr isdec
- muls #10,d2
- cmp.b #'.',-1(a0)
- bne.s 1$
- 3$ moveq #0,d0
- move.b (a0)+,d1
- cmp.b #10,d1
- beq.s 1$
- and.b #15,d1
- add.l d1,d2
- 1$ 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 #1,d7
- cmp.b #'$',0(a0)
- bne.s rh3
- addq #1,a0
- rh3 moveq #0,d0
- cmpi.b #10,0(a0)
- beq.s rherr
- lea hextab(a4),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
- rherr moveq #0,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
- addq #1,a0
- bra.s kllblnks
-
- ; exit program. If background flag is set, wait for
- ; amiga-amiga-x
-
- stopall addq #4,a7
- bra exitall
-
- exit tst.b background(a4)
- bne quithold
- exitall bsr killpage
- bsr freeblank
- bsr killhistory
- move.l stplist(a4),a3
- tst.l 0(a3)
- beq.s ex0
- move.l a3,d0
- bsr waok
- bra.s exitall
-
- ex0 tst.b background(a4)
- beq.s ex1
- bsr removeh
-
- ex1 move.l SysBase(a4),a1
- move.l #_LVOSwitch,a0
- move.l oldswitch,d0
- CALL SetFunction,a1
- moveq #3,d0
- lea IOCounter(a4),a1
- RECALL RemIntServer
-
- move.l replyport(a4),-(a7)
- LIBCALL DeletePort
- addq #4,a7
- bsr stoptimer
- lea timerio,a1
- CALL CloseDevice,SysBase(a4)
- move.l timerport(a4),-(a7)
- LIBCALL DeletePort
- addq #4,a7
-
- tst.b post_V34(a4)
- bne.s 1$
- lea sampleio(a4),a1
- CALL AbortIO,SysBase(a4)
- lea sampleio(a4),a1
- move.l 14(a1),d7
- CALL CloseDevice,SysBase(a4)
- move.l d7,-(a7)
- LIBCALL DeletePort
- addq #4,a7
-
- 1$ move.l idletask(a4),a1
- CALL RemTask,SysBase(a4)
-
- move.l #_LVOAddTask,a0
- move.l OldAddTask(PC),d0
- move.l SysBase(a4),a1
- CALL SetFunction,SysBase(a4)
- bsr restoretrap
-
- tst.l wnptr(a4)
- beq.s 5$
- move.l wnptr(a4),a0
- CALL CloseWindow,intuibase(a4)
- 5$ move.l screenptr(a4),d0
- beq.s 6$
- move.l d0,a0
- CALL CloseScreen,intuibase(a4)
- clr.l screenptr(a4)
-
- 6$ move.l infile(a4),d1
- beq.s ex11
- CALL Close,dosbase(a4)
- ex11 bsr freehidmem
- bsr freealias
- bsr clrfkeys
- move.l realstack(a4),a7
- IFND DEBUG
- CALL Forbid,SysBase(a4)
- move.l wbmsg(a4),d0
- beq.s todos
- move.l d0,a1
- RECALL ReplyMsg
- moveq #0,d0
- rts
-
- todos move.l mytask(a4),a0
- move.l 152(a0),d1
- CALL UnLock,dosbase(a4)
- move.l myseg(a4),d1
- CALL UnLoadSeg,dosbase(a4)
- ENDC
- moveq #0,d0
- rts
-
- ;print a bcpl-string
- ;d0 = bcpl-pointer to bcpl-string
- putbcpl movem.l d3/a0-a1,-(a7)
- tst.l d0
- beq.s 1$
- lsl.l #2,d0
- move.l d0,a1
- moveq #0,d3
- move.b (a1)+,d3
- subq #1,d3
- bmi.s 1$
- 2$ move.b (a1)+,d0
- beq.s 1$
- bsr putchar
- dbf d3,2$
- 1$ move.l ptr(a4),d0
- movem.l (a7)+,d3/a0-a1
- rts
-
- ;compare strings
- ;a0/a1 = pointers to string
- ;returns d0 = true(0) false(1), d1 = length
- strcmp movem.l a0-a1,-(a7)
- moveq #0,d0
- move.l d0,d1
- src2 move.b (a0)+,d0
- beq.s src1
- cmp.b #10,d0
- beq.s src1
- addq #1,d1
- cmp.b (a1)+,d0
- beq.s src2
- bra.s src3
- src1 move.b 0(a1),d0
- src3 movem.l (a7)+,a0-a1
- rts
-
- strbuf movem.l d0/a1-a2,-(a7)
- move.l a0,a1
- lea buffer,a2
- 1$ move.b (a1)+,d0
- cmp.b #10,d0
- beq.s 2$
- cmp.b #' ',d0
- beq.s 2$
- or.b #' ',d0
- beq.s 2$
- move.b d0,(a2)+
- bra.s 1$
- 2$ clr.b (a2)+
- movem.l (a7)+,d0/a1-a2
- rts
-
- tolower movem.l d0-d1/a0,-(a7)
- subq #1,d0
- bmi.s 3$
- 1$ move.b 0(a0),d1
- cmp.b #'A',d1
- blt.s 2$
- cmp.b #'Z',d1
- bgt.s 2$
- or.b #' ',d1
- 2$ move.b d1,(a0)+
- dbf d0,1$
- 3$ movem.l (a7)+,d0-d1/a0
- 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)
- moveq #0,d0
- moveq #0,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
-
-
- ;add a fkey definition to the fkey list. Each entry
- ;looks like this: long Succ, long Pred, byte Key#, byte length,
- ; char text[]
-
- showfkeys lea fkhead(a4),a0
- bsr puthead
- lea fkeys(a4),a1
- 1$ move.l 0(a1),a1
- tst.l 0(a1)
- beq.s 2$
- moveq #'F',d0
- bsr putchar
- move.b 8(a1),d3
- bsr bytedec
- move.b 9(a1),d1
- subq #1,d1
- lea 10(a1),a2
- 3$ move.b (a2)+,d0
- bsr putchar
- dbf d1,3$
- bsr newline
- bra.s 1$
- 2$ rts
-
- setfkey bsr nodenam
- move.b procnum(a4),d5
- beq.s showfkeys
- cmp.b #21,d5
- bge syntax
- subq #1,d5
- move.b d5,procnum(a4)
- lea fkeys(a4),a1
- 1$ move.l 0(a1),a1
- tst.l 0(a1)
- beq.s 2$
- cmp.b 8(a1),d5
- bne.s 1$
- move.l a1,d3
- CALL Remove,SysBase(a4)
- move.l d3,a1
- bsr removefkey
- 2$ tst.b 0(a5)
- beq.s 4$
- move.l a5,a0
- bsr strlen
- move.l d0,d5
- add.w #10,d0
- moveq #0,d1
- CALL AllocMem,SysBase(a4)
- tst.l d0
- beq.s 4$
- move.l d0,a1
- move.l d0,a3
- move.b procnum(a4),8(a1)
- move.b d5,9(a1)
- lea fkeys(a4),a0
- CALL AddHead,SysBase(a4)
- lea 10(a3),a3
- subq #1,d5
- 3$ move.b (a5)+,(a3)+
- dbeq d5,3$
- 4$ rts
-
- clrfkeys lea fkeys(a4),a0
- CALL RemHead,SysBase(a4)
- tst.l d0
- beq.s 1$
- move.l d0,a1
- bsr removefkey
- bra.s clrfkeys
- 1$ rts
-
- removefkey move.b 0(a1),d0
- ext.w d0
- ext.l d0
- add.w #10,d0
- CALL FreeMem,SysBase(a4)
- 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)
- tst.l d0
- bmi.s 2$
- cmp.l #9999999,d0
- ble.s 1$
- 2$ move.w #smallnix,d0
- bra.s ld6
- 1$ lea binarea+8(a4),a1
- move.l #' ',-8(a1)
- move.l #' ',-4(a1)
- clr.b 0(a1)
- subq #1,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(a4),a2
- cmpa.l a2,a1
- bne.s ld3
- subq.l #1,ptr(a4)
- bra.s ld1
- ld3 move.b 0(a1),(a2)+
- move.b #' ',(a1)+
- dbf d2,ld3
- ld1 btst #1,d3
- bne.s ld4
- move.w #binarea,d0
- ld6 bsr putstrw
- ld4 movem.l (a7)+,d1-d2/a1-a2
- rts
-
- ;write UBYTE
- ;d3 = value
- bytedec bsr dec
- move.w #decimal,d0
- bra.s pm1
-
- ;write signed byte
- ;d3 = value
- plusmins movem.l d5/a3,-(a7)
- move.w #$2020,minus(a4)
- move.b d3,d5
- bpl.s 2$
- neg.b d3
- 2$ bsr.s dec
- tst.b d5
- bpl.s 1$
- move.l d0,a3
- move.b #'-',-(a3)
- 1$ movem.l (a7)+,d5/a3
- move.w #minus+1,d0
- pm1 bra putstrw
-
- dec movem.l d3/a3,-(a7)
- move.l #$20202020,decimal(a4)
- and.l #$ff,d3
- lea decimal+3(a4),a3
- bloop tst.b d3
- beq.s bend
- divu #10,d3
- swap d3
- ori.b #'0',d3
- move.b d3,-(a3)
- clr.w d3
- swap d3
- bra.s bloop
- bend cmpa.l #decimal+3+dataarea,a3
- bne 1$
- move.b #'0',-(a3)
- 1$ move.l a3,d0
- movem.l (a7)+,d3/a3
- rts
-
- ;write a string, move cursor into next line
- ;d0 = pointer to text
- putnamw bsr putstrw
- bra.s putnam1
- putnam bsr putstr
- putnam1 tst.b d0
- beq.s ncr
- bsr newline
- ncr rts
-
- putblank moveq #' ',d0
-
- ;write one char
- ;d0 = char
- putchar movem.l d1/a0,-(a7)
- move.l ptr(a4),d1
- lea out,a0
- move.b d0,0(a0,d1)
- addq.l #1,ptr(a4)
- movem.l (a7)+,d1/a0
- rts
-
- ;write a string, strings are only put into the output buffer when
- ;a LF is detected
- ;d0 = pointer to string
- ;returns d0 = cursor position
- putstrw and.l #$0000ffff,d0
- add.l #dataarea,d0
- putstr movem.l d1-d7/a0-a6,-(a7)
- move.b #1,printed(a4)
- move.l d0,a2
- lea out,a3
- move.l ptr(a4),d0
- move.l a2,d5
- bne pst1
- lea longnix(a4),a2
-
- pst1 move.b (a2)+,d1
- cmpi.b #13,d1
- beq pst1
- cmpi.b #10,d1
- beq.s lineend
- move.b d1,0(a3,d0)
- beq prend
- cmp #100,d0
- bge.s pst1
- addq #1,d0
- bra.s pst1
-
- lineend tst.b fromfile(a4)
- beq.s 1$
- moveq #0,d0
- bra prend
-
- 1$ tst.l lastprinted(a4)
- bne.s 2$
- bsr killpage
-
- 2$ addq #1,d0
- move.l d0,-(a7)
- add #14,d0
- moveq #0,d1
- CALL AllocMem,SysBase(a4)
- move.l (a7)+,d1
- tst.l d0
- beq prend
- move.l d0,a0
- move.w d1,12(a0)
- cmp.w maxllength(a4),d1
- ble.s 7$
- move.w d1,maxllength(a4)
- 7$ move.l node(a4),8(a0)
- clr.l node(a4)
- clr.l 0(a0)
-
- move.l lastprinted(a4),d0
- move.l d0,4(a0)
- bne.s 3$
- move.l a0,outchain(a4)
- bra.s 4$
- 3$ move.l d0,a1
- move.l a0,0(a1)
- 4$ move.l a0,lastprinted(a4)
- move.b #' ',14(a0)
- subq #1,d1
- lea 15(a0),a0
- lea out,a1
- subq #1,d1
- bmi.s 6$
- 5$ move.b (a1)+,(a0)+
- dbf d1,5$
- 6$ move.l numlines(a4),d2
- cmp.l maxlines(a4),d2
- ble.s 8$
-
- move.l outchain(a4),a1
- move.l 0(a1),a2
- move.l a2,outchain(a4)
- clr.l 4(a2)
- move.w 12(a1),d0
- add.w #14,d0
- ext.l d0
- CALL FreeMem,SysBase(a4)
- bra.s 9$
-
- 8$ addq.l #1,d2
- move.l d2,numlines(a4)
-
- 9$ moveq #0,d0
- move.l d0,d5
- tst.b addlines(a4)
- beq pst1
- bsr addline
- bra pst1
- prend move.l d0,ptr(a4)
- movem.l (a7)+,d1-d7/a0-a6
- rts
-
- ;Kill output buffer
- killpage movem.l d0-d7/a0-a6,-(a7)
- tst.l outchain(a4)
- beq.s 2$
- move.l outchain(a4),a1
- bsr killlines
- clr.l outchain(a4)
- clr.l lastprinted(a4)
- clr.l numlines(a4)
- clr.w maxllength(a4)
- 2$ movem.l (a7)+,d0-d7/a0-a6
- rts
-
- ;kill the remainder of the output buffer
- killlines move.l 0(a1),-(a7)
- move.w 12(a1),d0
- ext.l d0
- add #14,d0
- CALL FreeMem,SysBase(a4)
- move.l (a7)+,a1
- move.l a1,d7
- bne.s killlines
- rts
-
- freeblank move.l blanks(a4),d0
- beq.s 1$
- move.l d0,a1
- move.w colms(a4),d0
- ext.l d0
- CALL FreeMem,SysBase(a4)
- clr.l blanks(a4)
- 1$ rts
-
- ;write a portion of the output buffer to the screen
- blastout move.l rastport(a4),a1
- moveq #1,d0
- CALL SetAPen,gfxbase(a4)
- move.l rastport(a4),a1
- moveq #1,d0
- CALL SetDrMd,gfxbase(a4)
- moveq #0,d7
-
- move.w loffset(a4),d2
- beq.s 7$
- move.w colms(a4),d4
- add.w d4,d2
- move.w maxllength(a4),d3
- cmp.w d3,d2
- ble.s 7$
- move.w d3,d2
- sub.w d4,d2
- bpl.s 8$
- moveq #0,d2
- 8$ move.w d2,loffset(a4)
-
- 7$ bsr tstfirstlin
-
- 1$ tst.l outchain(a4)
- beq.s 3$
- bsr findline
-
- 2$ move.w colms(a4),d5
- ext.l d5
- move.w loffset(a4),d4
- ext.l d4
- moveq #18,d6
- 6$ lea 14(a5,d4),a0
- move.w 12(a5),d3
- ext.l d3
- bsr blastline
- blt.s 9$
- move.w rows(a4),currenty(a4)
- bra.s 5$
- 9$ tst.l 0(a5)
- beq.s 5$
- move.l 0(a5),a5
- bra 6$
- 5$ cmp.w rows(a4),d7
- bcc.s 3$
- 10$ moveq #0,d3
- bsr blastline
- bcs.s 10$
- 3$ bset.b #1,propupdate(a4)
- rts
-
- ;get a pointer to a line (line # in d0)
- findline move.l outchain(a4),d1
- beq 2$
- move.l d1,a5
- 1$ tst d0
- beq.s 2$
- tst.l 0(a5)
- beq.s 2$
- move.l 0(a5),a5
- dbf d0,1$
- 2$ rts
-
- ;check if the display is as 'full' as possible
- tstfirstlin move.l firstline(a4),d0
- move.l d0,d2
- add.w rows(a4),d2
- cmp.l numlines(a4),d2
- bmi.s 1$
- move.l numlines(a4),d2
- sub.w rows(a4),d2
- bpl.s 4$
- moveq #0,d2
- 4$ move.l d2,d0
- move.l d2,firstline(a4)
- 1$ rts
-
- ;display one line, fill the gap between the end of the line and
- ;the end of the window with spaces.
- ;d6 = ypos, d5=colms, d3= linelength, d7= line # in window, a0 = text
-
- blastline move d6,d1
- moveq #6,d0
- move.l rastport(a4),a1
- CALL Move,gfxbase(a4)
- sub.w d4,d3
- bpl.s 7$
- moveq #0,d3
- bra.s 6$
- 7$ cmp.w d5,d3
- bmi.s 4$
- move.w d5,d3
- 4$ move.l d3,d0
- beq.s 6$
- move.l rastport(a4),a1
- CALL Text,gfxbase(a4)
- 6$ move.l d5,d0
- sub.l d3,d0
- ble.s 5$
- move.l blanks(a4),a0
- move.l rastport(a4),a1
- CALL Text,gfxbase(a4)
- 5$ addq #8,d6
- addq #1,d7
- cmp.w rows(a4),d7
- rts
-
- ;Write pointer, display '-------' if empty
- hexan tst.l d0
- beq putstr
-
- ;Write 8 byte hex value
- ;d0 = value
- hexa bsr gthex
- bra putstr
-
- gthex movem.l d1-d7/a0-a6,-(a7)
- moveq.l #7,d5
- lea hexarea(a4),a1
- lea hextab(a4),a0
- moveq #0,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
- rts
-
- ;Convert/write byte into binary string
- ;d0 = value
- bin movem.l d1-d7/a0-a6,-(a7)
- lea binarea(a4),a0
- move.w #$2020,8(a0)
- moveq.l #7,d4
- 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
-
- ;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(a4),dp_Port
- lea mypacket,a1
- CALL PutMsg,SysBase(a4)
- move.l replyport(a4),a0
- CALL WaitPort,SysBase(a4)
- move.l replyport(a4),a0
- CALL GetMsg,SysBase(a4)
- movem.l (a7)+,d0-d7/a0-a6
- rts
-
- ;32-bit division
- ;d0 / d1
- ;returns d0
- div movem.l d2-d3,-(a7)
- tst.l d1
- beq div8
- 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 xopsleep(a4)
- LIBCALL CreatePort
- addq #8,a7
- move.l d0,InputMsg(a4)
- move.l d0,-(a7)
- LIBCALL CreateStdIO
- addq #4,a7
- move.l d0,InRequest(a4)
- move.l d0,a1
- lea devicenam(a4),a0
- moveq #0,d0
- moveq #0,d1
- CALL OpenDevice,SysBase(a4)
- move.l d0,devstatus(a4)
- movea.l InRequest(a4),a1
- move.l #InInterrupt+dataarea,40(a1)
- move.w #9,28(a1)
- CALL DoIO,SysBase(a4)
- move.l d0,iostatus(a4)
- rts
-
- ;remove handler
- removeh movea.l InRequest(a4),a1
- move.l #InInterrupt+dataarea,40(a1)
- move.w #10,28(a1)
- CALL DoIO,SysBase(a4)
- movea.l InRequest(a4),a1
- CALL CloseDevice,SysBase(a4)
- move.l InRequest(a4),-(a7)
- LIBCALL DeleteStdIO
- addq #4,a7
- move.l InputMsg(a4),-(a7)
- LIBCALL DeletePort
- addq #4,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+dataarea
- 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+dataarea,a1
- move.l #(1<<mysignal),d0
- CALL Signal,_SysBase(PC)
- move.l (a7)+,a0
- clr.b 4(a0)
- endhandler move.l a0,d0
- rts
-
- snoop bsr cls
- bsr nodenam
- moveq #1,d7
- lea TReNode(PC),a3
- bsr findnam
- tst.b d7
- bne.s 1$
- move.w #stperr,d0
- bra putnamw
- 1$ move.l d0,captask(a4)
- pea 0
- pea memportname(a4)
- LIBCALL CreatePort
- addq #8,a7
- move.l d0,snoopport(a4)
- beq tm6
-
- bsr replyintui
- move.b #1,addlines(a4)
- lea snoophead(a4),a0
- bsr puthead
- move.l SysBase(a4),a1
- move.l -196(a1),oldalloc
- move.l -208(a1),oldfree
- move.l #capmalloc,d0
- move.l #-198,a0
- CALL SetFunction,SysBase(a4)
- move.l SysBase(a4),a1
- move.l #capmfree,d0
- move.l #-210,a0
- CALL SetFunction,SysBase(a4)
- clr.b bool(a4)
- clr.b cbreak(a4)
- clr.b capgone(a4)
- clr.b capwaiting(a4)
- clr.l capiscli(a4)
-
- move.l captask(a4),a1
- cmp.b #13,8(a1) ;ln_Type
- bne.s waitmem
- tst.l 140(a1)
- beq.s waitmem
- move.l 172(a1),d0 ;pr_CLI
- beq.s waitmem
- lsl.l #2,d0
- move.l d0,a0
- lea 60(a0),a0
- move.l a0,capiscli(a4)
- move.l 0(a0),d0
- move.l d0,capseg(a4)
- bne.s waitmem
- move.w #capwait,d0
- bsr putnamw
- bset.b #1,capwaiting(a4)
-
- waitmem move.l snoopport(a4),a0
- moveq #0,d1
- move.b 15(a0),d1
- bset d1,d0
- move.l d0,auxsig(a4)
- bsr processmsgs
-
- tm7 move.l mytask(a4),a0
- move.l snoopport(a4),a0
- CALL GetMsg,SysBase(a4)
- tst.l d0
- bne tm8
- tst.b cbreak(a4)
- bne snoopend
- tst.b capgone(a4)
- bne snoopend
- bra waitmem
-
- tm8 move.l d0,a3
- tst.b capwaiting(a4)
- beq.s tm15
- move.l capiscli(a4),d7
- beq.s tm15
- move.l d7,a0
- move.l 0(a0),capseg(a4)
- beq tm12
- clr.b capwaiting(a4)
-
- tm15 move.l 20(a3),d3
- btst #31,d3
- beq freed
- move.w #allok,d0
- bsr putstrw
- lea memname(PC),a2
- lea membit(PC),a1
- moveq #4,d5
- tm2 move.l 0(a1),d4
- btst d4,d3
- beq.s tm1
- move.w 0(a2),d0
- bsr putstrw
- tm1 addq #2,a2
- addq #4,a1
- dbf d5,tm2
- moveq #26,d1
- bsr tab
- move.l 24(a3),d0
- move.l d0,d3
- bsr hexa
- move.l 28(a3),d0
- bne.s tm3
- move.w #failed,d0
- bsr putstrw
- moveq #53,d1
- bsr tab
- bra tm4
- tm3 bsr hexa
- move.l 28(a3),d0
- add.l d3,d0
- bsr hexa
- bra tm4
-
- freed move.w #free,d0
- bsr putstrw
- move.b #'-',d0
- moveq #18,d1
- tm9 bsr putchar
- dbf d1,tm9
- bsr putblank
- 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
- tm12 bsr freemsg
- move.l captask(a4),a1
- tm13 tst.b capwaiting(a4)
- bne.s tm10
- move.l capiscli(a4),d0
- beq.s 1$
- move.l d0,a0
- move.l 0(a0),d0
- cmp.l capseg(a4),d0
- bne.s tm11
- 1$ move.b 15(a1),d0
- cmp.b #5,d0
- bge.s tm11
- cmp.b #2,d0
- bge.s tm10
- tm11 bset.b #1,capgone(a4)
- tm10 bra tm7
-
- snoopend move.l SysBase(a4),a1
- move.l oldalloc(PC),d0
- move.l #-198,a0
- CALL SetFunction,SysBase(a4)
- move.l SysBase(a4),a1
- move.l oldfree,d0
- move.l #-210,a0
- CALL SetFunction,SysBase(a4)
- move.l snoopport(a4),-(a7)
- LIBCALL DeletePort
- addq #4,a7
- tst.b cbreak(a4)
- bne.s 1$
- move.w #capexited,d0
- bra.s 2$
- 1$ move.w #stoped,d0
- 2$ bsr putnamw
- clr.b addlines(a4)
- clr.l auxsig(a4)
- tm6 rts
-
- memname dc.w memlarg,memclr,memfast,memchip,mempubl
- membit dc.l 17,16,2,1,0
-
- capmalloc movem.l d0-d7/a0-a6,-(a7)
- lea dataarea(PC),a4
- move.l SysBase(a4),a6
- move.l 276(a6),d4
- cmp.l captask(a4),d4
- bne.s capm1
- tst.b bool(a4)
- bne capm1
- move.b #1,bool
- moveq #36,d6
- bsr allocmsg
- beq capm2
- bset #31,d1
- move.l d1,20(a5)
- move.l d0,24(a5)
- move.l 60(a7),32(a5)
- move.l a5,remembr(a4)
- movem.l (a7)+,d0-d7/a0-a6
- bsr memalloc
- movem.l d0-d7/a0-a6,-(a7)
- lea dataarea(PC),a4
- move.l remembr(a4),a1
- move.l d0,28(a1)
- move.l snoopport(a4),a0
- move.b #5,8(a1)
- CALL PutMsg,SysBase(a4)
- clr.b bool(a4)
- movem.l (a7)+,d0-d7/a0-a6
- rts
- capm2 clr.b bool(a4)
- capm1 movem.l (a7)+,d0-d7/a0-a6
- memalloc dc.w $4ef9
- oldalloc dc.l 0
-
- capmfree movem.l d0-d7/a0-a6,-(a7)
- lea dataarea(PC),a4
- move.l SysBase(a4),a6
- move.l 276(a6),d4
- cmp.l captask(a4),d4
- bne.s capf1
- tst.b bool(a4)
- bne.s capf1
- move.b #1,bool(a4)
- moveq #36,d6
- bsr allocmsg
- beq.s capf2
- move.l d0,20(a5)
- move.l a1,24(a5)
- move.l 60(a7),32(a5)
- move.l snoopport(a4),a0
- move.b #5,8(a5)
- move.l a5,a1
- CALL PutMsg,SysBase(a4)
- capf2 clr.b bool(a4)
- capf1 movem.l (a7)+,d0-d7/a0-a6
- dc.w $4ef9
- oldfree dc.l 0
-
- allocmsg movem.l d0-d1/a0-a1,-(a7)
- move.l d6,d0
- move.l #65536,d1
- tst.l oldalloc
- bne.s 1$
- CALL AllocMem,_SysBase(PC)
- bra.s 2$
- 1$ bsr memalloc
- 2$ tst.l d0
- beq.s alm1
- move.l d0,a5
- move.w d6,18(a5)
- alm1 movem.l (a7)+,d0-d1/a0-a1
- move.l a5,d6
- rts
-
- freemsg move.w 18(a3),d0
- ext.l d0
- move.l a3,a1
- CALL FreeMem,SysBase(a4)
- rts
-
- tracelocks move.l #_LVOLock,d0
- moveq #-11,d1
- bra.s tracedos
-
- snoopfiles move.l #_LVOOpen,d0
- moveq #-1,d1
- tracedos move.w d0,patchwhat(a4)
- move.w d1,dosoffset(a4)
- pea 0
- pea memportname(a4)
- LIBCALL CreatePort
- addq #8,a7
- move.l d0,snoopport(a4)
- beq 10$
-
- bsr replyintui
- move.b #1,addlines(a4)
- bsr cls
- lea fileshead(a4),a0
- bsr puthead
-
- move.w patchwhat(a4),a0
- move.l dosbase(a4),a1
- tst.b post_V34(a4)
- beq.s 1$
- move.l 2(a1,a0.w),oldopen
- move.l #myopen,d0
- CALL SetFunction,SysBase(a4)
- bra.s 2$
-
- 1$ CALL Forbid,SysBase(a4)
- move.w 0(a1,a0.w),-(a7)
- move.l 2(a1,a0.w),-(a7)
- move.w #$4ef9,0(a1,a0.w)
- move.l #myopen,2(a1,a0.w)
- move.l #$c09d6e-$c09d20,d0
- add.l dosbase(a4),d0
- move.l d0,oldopen
- RECALL Permit
-
- clr.b cbreak(a4)
- 2$ move.l snoopport(a4),a0
- moveq #0,d1
- move.b 15(a0),d1
- bset d1,d0
- move.l d0,auxsig(a4)
- bsr processmsgs
-
- 3$ move.l mytask(a4),a0
- move.l snoopport(a4),a0
- CALL GetMsg,SysBase(a4)
- tst.l d0
- bne 10$
- tst.b cbreak(a4)
- bne 7$
- bra.s 2$
-
- 10$ move.l d0,a3
- move.l 20(a3),d0
- bsr getaskname2
- moveq #11,d1
- bsr tab
- moveq #' ',d0
- bsr putchar
- move.l 24(a3),d0
- bne.s 6$
- move.w #failed,d0
- bsr putstrw
- moveq #21,d1
- bsr tab
- bra.s 11$
-
- 6$ bsr hexa
- 11$ move.b 28(a3),d0
- bmi.s 4$
- cmp.b #2,d0
- ble.s 12$
- 4$ move.w #type,d0
- bsr putstrw
- moveq #28,d1
- bsr tab
- bra.s 5$
- 12$ ext.w d0
- lsl.w #3,d0
- add.w #fmode,d0
- bsr putstrw
- 5$ moveq #29,d0
- add.l a3,d0
- bsr putnam
-
- bsr freemsg
- bra 3$
-
- 7$ move.w patchwhat(a4),a0
- move.l dosbase(a4),a1
- tst.b post_V34(a4)
- beq.s 8$
- move.l oldopen,d0
- CALL SetFunction,SysBase(a4)
- bra.s 9$
-
- 8$ CALL Forbid,SysBase(a4)
- move.l (a7)+,2(a1,a0)
- move.w (a7)+,0(a1,a0)
- RECALL Permit
-
- 9$ move.l snoopport(a4),-(a7)
- LIBCALL DeletePort
- addq #4,a7
- move.w #stoped,d0
- bsr putnamw
- clr.b addlines(a4)
- clr.l auxsig(a4)
- rts
-
- myopen movem.l d3-d7/a0-a6,-(a7)
- movem.l d1-d2,-(a7)
- move.l d1,a0
- bsr strlen
- move.l d0,d6
- add.l #30,d6
- bsr allocmsg
- beq.s 1$
- move.w .dosoffset(PC),d3
- addq.w #1,d3
- bne.s 2$
- sub.w #1004,d2
- bra.s 3$
- 2$ addq.w #3,d2
- 3$ move.b d2,28(a5)
- move.l _SysBase(PC),a6
- move.l 276(a6),20(a5)
- lea 29(a5),a1
- move.l d1,a0
- RECALL CopyMem
- 1$ movem.l (a7)+,d1-d2
- move.l a5,d6
- move.w .dosoffset(PC),d0
- ext.l d0
- move.l .dosbase(pc),a6
- jsr $bababa
- oldopen equ *-4
- move.l d0,d7
- movem.l d1-d2,-(a7)
- tst.l d6
- beq.s 1$
- move.l d6,a5
- move.l d0,24(a5)
-
- move.l snoopport+dataarea(PC),a0
- move.b #5,8(a5)
- move.l a5,a1
- CALL PutMsg,_SysBase(PC)
- 1$ move.l d7,d0
- movem.l (a7)+,d1-d2
- movem.l (a7)+,d3-d7/a0-a6
- rts
-
- myswitch movem.l d0-d1/a0,-(a7)
- move.l 4,a0
- move.l 276(a0),d0
- move.l .tasksnum(PC),d1
- lea cputime,a0
- subq.l #1,d1
- bmi.s swadd
- sw0 cmp.l (a0)+,d0
- dbeq d1,sw0
- bne.s swadd
-
- swi1 tst.b .post_V34
- beq.s 1$
- bsr getV2.0time
- move.l d0,d1
- sub.l lasttime(PC),d0
- bcs.s swgo2
- move.l d1,lasttime
- bra.s 2$
-
- 1$ move.l #999999,d0
- move.l d0,d1
- sub.l sampleio+36+dataarea(PC),d0
- move.l d1,sampleio+36+dataarea
- 2$ lsr.l #8,d0
- add.l d0,508(a0)
- swgo2 movem.l (a7)+,d0-d1/a0
- dc.w $4ef9
- oldswitch dc.l 0
- swadd cmp.l #125,tasksnum+dataarea
- bge.s swgo2
- addq.l #1,tasksnum+dataarea
- move.l d0,0(a0)
- addq.l #4,a0
- clr.l 508(a0)
- bra.s swi1
-
- lasttime dc.l 0
-
- getV2.0time movem.l d2/a0,-(a7)
- move.w #$4000,$dff09a ;ReadEClock
- lea $bfe001,a0
- moveq #0,d0
- move.l d0,d1
- move.l d1,d2
- move.b $700(a0),d0
- move.b $600(a0),d1
- move.b $700(a0),d2
-
- cmp.b d0,d2
- beq.s 1$
- moveq #-1,d1
- 1$ lsl.w #8,d2
- move.b d1,d2
- addq #1,d2
- neg.w d2
- move.l .timerbase(PC),a0
- move.l $50(a0),d0
- move.w d2,d0
- move.w #-$4000,$dff09a
- movem.l (a7)+,d2/a0
- rts
-
- countio addq.l #1,iocount+dataarea
- moveq #0,d0
- rts
-
- iconbackdrp tst.b iconifyon(a4)
- beq.s cio1
- lea icnwindow,a0
- eor.l #$100,14(a0) ;wn_Flags
- cio1 rts
-
- iconifyoff tst.b iconifyon(a4)
- beq.s cio1
- clr.b iconifyon(a4)
- tst.b fromfile(a4)
- bne.s 1$
- move.l wnptr(a4),d0
- beq.s 1$
- move.l d0,a0
- lea iconifgad,a1
- CALL RemoveGadget,intuibase(a4)
- move.l wnptr(a4),a0
- CALL RefreshWindowFrame,intuibase(a4)
- 1$ move.l #iconify,d0
- bra.s killseg
-
- propgadoff tst.b propgadon(a4)
- beq.s cio1
- clr.b propgadon(a4)
- tst.b fromfile(a4)
- bne.s 1$
- move.l wnptr(a4),d0
- beq.s 1$
- move.l d0,a0
- lea sbgadget,a1
- CALL RemoveGadget,intuibase(a4)
- move.l wnptr(a4),a0
- CALL RefreshWindowFrame,intuibase(a4)
- bsr setupscreen
- 1$ move.l #setprop,d0
-
- killseg movem.l d1-d2/a0-a5,-(a7)
- subq #4,d0
- move.l 4,a6
- move.l 276(a6),a5
- move.l 128(a5),d1
- lsl.l #2,d1
- move.l d1,a3
- move.l 12(a3),d1
- bne.s 2$
- move.l 172(a5),d1
- lsl.l #2,d1
- move.l d1,a5
- move.l 60(a5),d1
-
- 2$ lsl.l #2,d1
- cmp.l d0,d1
- beq.s 4$
- move.l d1,a5
- move.l 0(a5),d1
- beq.s 5$
- bra.s 2$
-
- 4$ move.l d1,a0
- move.l 0(a0),0(a5)
- clr.l 0(a0)
- lsr.l #2,d1
- CALL UnLoadSeg,dosbase(a4)
- movem.l (a7)+,d1-d2/a0-a5
- 5$ rts
-
- alert bsr stoptimer
- move.l excpttask(a4),d0
- bne.s alert1
- move.w #noguru,d0
- bra putnamw
- alert1 move.w #softfail,d0
- bsr putstrw
- move.l excpttask(a4),d0
- bsr getaskname2
- bsr newline
- cmp.l #3,excpterror(a4)
- bne.s 1$
- move.w #addrserr,d0
- bsr putstrw
- move.l excptaddr(a4),d0
- bsr hexa
- bsr newline
- 1$ move.w #procount,d0
- bsr putstrw
- move.l excptpc(a4),d0
- bsr hexa
- bsr newline
- move.w #gurutxt,d0
- bsr putstrw
- move.l excpterror(a4),d0
- bsr hexa
- lea out,a0
- move.l ptr(a4),d0
- move.b #'.',-1(a0,d0)
- move.l excpttask(a4),d0
- bsr hexa
- bra newline
-
- showguru bsr alert
- tst.b ownscreen(a4)
- bne.s 5$
- move.l wnptr(a4),a0
- CALL WindowToFront,intuibase(a4)
- bra.s 2$
- 5$ move.l screenptr,a0
- CALL ScreenToFront,intuibase(a4)
- 2$ move.w #whatnow,d0
- bsr putnamw
- clr.l oldpageend
- bsr readline
-
- cmp.b #'i',inputbuffer
- beq.s 4$
- 1$ cmp.b #'k',inputbuffer
- bne.s 2$
- move.l excpttask(a4),a1
- tst.l 22(a1)
- bne.s 3$
- CALL RemTask,SysBase(a4)
- bra.s 4$
- 3$ move.l a1,d0
- bsr canok
- 4$ clr.l lastprinted(a4)
- rts
-
- myaddtask movem.l d0/a0,-(a7)
- tst.b wanttraps+dataarea
- beq.s 2$
- lea mytrap(PC),a0
- move.l 50(a1),d0
- beq.s 1$
- cmp.l oldtrap(PC),d0
- beq.s 1$
- lea myproctrap(PC),a0
- cmp.l oldproctrap(PC),d0
- bne.s 2$
- 1$ move.l a0,50(a1)
-
- 2$ movem.l (a7)+,d0/a0
- move.l a1,-(a7)
- jsr $bababa
- OldAddTask equ *-4
- move.l (a7)+,d0
- movem.l d1-d7/a0-a6,-(a7)
- move.l d0,d7
- lea tsecs+dataarea(PC),a0
- lea tmics+dataarea(PC),a1
- CALL CurrentTime,intuibase+dataarea(PC)
- CALL Forbid,_SysBase(PC)
- move.w numtaskstimed+dataarea(PC),d5
- lsl.w #2,d5
- lea taskstampid,a5
- lea 0(a5,d5.w),a5
- move.l d7,0(a5)
- move.l tsecs+dataarea(PC),d0
- move.l d0,taskstamps-taskstampid(a5)
- clr.l usedtime-taskstampid(a5)
- addq.w #1,numtaskstimed+dataarea
- lea dataarea(PC),a4
- bsr cleanuptimers
- RECALL Permit
- cmp.b #5,timerio+8
- bne.s 3$
- moveq #0,d0
- move.w timersig+dataarea(PC),d1
- bset d1,d0
- move.l mytask+dataarea(PC),a1
- RECALL Signal
- 3$ move.l d7,d0
- movem.l (a7)+,d1-d7/a0-a6
- rts
-
- myproctrap bsr traphandle
- dc.w $4ef9
- oldproctrap dc.l 0
-
- mytrap bsr traphandle
- moveq #0,d0
- CALL Wait,SysBase(a4)
- dc.w $4ef9
- oldtrap dc.l 0
-
- coldreboot move.w #$4000,$dff09a
- clr.l sysbase
-
- reboot move.l SysBase(a4),a6
- tst.b post_V34(a4)
- beq.s 1$
- jmp -726(a6) ;_LVOColdReboot
-
- 1$ lea 2$(PC),a5
- RECALL Supervisor
-
- 2$ move.l $fc0004,a0
- subq #2,a0
- CNOP 0,4
- reset
- jmp 0(a0)
-
-
- traphandle movem.l d0-d7/a0-a6,$180
- move.l 4,a6
- move.l 276(a6),.excpttask
- move.l 4(a7),d0
- cmp.l #9,d0
- beq.s 2$
- move.l d0,.excpterror
- moveq #10,d1
- cmp.l #3,d0
- bne.s 1$
- move.l 0(a7,d1.w),.excptaddr
- moveq #18,d1
- 1$ move.l 0(a7,d1.w),.excptpc
- move.l mytask+dataarea(PC),a1
- move.l trapsignal+dataarea(PC),d0
- RECALL Signal
- 2$ movem.l $180,d0-d7/a0-a6
- rts
-
- trapguru tst.b wanttraps(a4)
- bne restoretrap
- move.b #1,wanttraps(a4)
-
- addtraps tst.b wanttraps(a4)
- beq 5$
- move.l 304(a6),oldtrap ;Original EXEC trap handler
- moveq #-1,d0
- CALL AllocSignal,SysBase(a4)
- moveq #0,d1
- bset d0,d1
- move.l d1,trapsignal(a4)
- RECALL Forbid ;change the trap handler of
- moveq #0,d5 ;aleady running tasks
- bsr getaskdat ;get task stucture pointers
- 1$ tst.b entries(a4)
- beq.s 2$
- lea -16(a5),a5
- move.l 0(a5),a3 ;pointer to a task structure
- lea myproctrap(PC),a0
- move.l 50(a3),d0 ;Task->tc_TrapCode
- cmp.l oldproctrap(PC),d0 ;AmigaDos Handler ?
- beq.s 3$
- lea mytrap(PC),a0 ;EXEC Handler ?
- cmp.l oldtrap(PC),d0
- bne.s 4$ ;must be a custom one, skip it
- 3$ move.l a0,50(a3) ;replace it
- 4$ subq.b #1,entries(a4)
- bra.s 1$
- 2$ CALL Permit,SysBase(a4)
- 5$ rts
-
- restoretrap tst.b wanttraps(a4)
- beq.s 6$
- tst.b fromfile(a4)
- bne.s 5$
- CALL Forbid,SysBase(a4)
- bsr getaskdat
- 1$ tst.b entries(a4)
- beq.s 2$
- lea -16(a5),a5
- move.l 0(a5),a3
- move.l oldproctrap(PC),a0
- move.l 50(a3),d0
- cmp.l #myproctrap,d0
- beq.s 3$
- move.l oldtrap(PC),a0
- cmp.l #mytrap,d0
- bne.s 4$
- 3$ move.l a0,50(a3)
- 4$ subq.b #1,entries(a4)
- bra.s 1$
- 2$ CALL Permit,SysBase(a4)
- clr.l trapsignal(a4)
- 5$ clr.b wanttraps(a4)
- 6$ rts
-
- ;save the contents of the output buffer
- ;to a file, append the output if the file allready exists
- saveoutput bsr nodenam2
- tst.b 0(a5)
- beq syntax
- move.l a5,d1
- move.l #1004,d2 ;mode_readwrite
- CALL Open,dosbase(a4)
- move.l d0,d5
- beq.s 5$
- moveq #1,d3
- moveq #0,d2
- move.l d0,d1
- CALL Seek,dosbase(a4)
- bra.s 1$
- 5$ move.l a5,d1
- move.l #1006,d2 ;mode_newfile
- CALL Open,dosbase(a4)
- move.l d0,d5
- bne.s 1$
- move.w #openerr,d0
- bsr putstrw
- move.l a5,d0
- bra putnam
- 1$ move.l outchain(a4),d0
- beq.s 3$
- 2$ move.l d0,a5
- move.w 12(a5),d3
- beq.s 4$
- ext.l d3
- lea 14(a5),a1
- move.l a1,d2
- move.l d5,d1
- CALL Write,dosbase(a4)
- tst.l d0
- ble.s 3$
- 4$ moveq #1,d3
- move.l d5,d1
- move.l #cr+dataarea,d2
- CALL Write,dosbase(a4)
- tst.l d0
- ble.s 3$
- move.l 0(a5),d0
- bne.s 2$
- 3$ move.l d5,d1
- CALL Close,dosbase(a4)
- rts
-
- grabtimerio lea tiohead(a4),a0
- bsr puthead
- move.b timeout(a4),d4
- move.b #255,timeout(a4)
- bsr starttimer
- move.b d4,timeout(a4)
- lea timerio,a1
- CALL Disable,SysBase(a4)
- 2$ move.l 0(a1),d2
- beq.s 1$
- move.l d2,a1
- bra.s 2$
- 1$ CALL Enable,SysBase(a4)
- lea -4(a1),a5
- bsr stoptimer
- lea buffer,a3
- moveq #1,d4
- bsr gettrq
-
- lea timerio,a0
- lea dummy,a1
- moveq #40,d0
- CALL CopyMem,SysBase(a4)
-
- lea dummy,a1
- lea timernam(a4),a0
- moveq #0,d1
- moveq #0,d0
- CALL OpenDevice,SysBase(a4)
-
- lea dummy,a1
- move.l #1<<30,32(a1)
- CALL SendIO,SysBase(a4)
-
- lea dummy,a5
- CALL Disable,SysBase(a4)
- 8$ move.l 0(a5),d2
- beq.s 7$
- move.l d2,a5
- bra.s 8$
- 7$ CALL Enable,SysBase(a4)
- lea -4(a5),a5
-
- lea dummy,a1
- CALL AbortIO,SysBase(a4)
- lea timerio,a1
- CALL WaitIO,SysBase(a4)
- move.w timersig(a4),d0
- moveq #0,d1
- bset d0,d1
- moveq #0,d0
- CALL SetSignal,SysBase(a4)
-
- moveq #0,d4
- bsr gettrq
-
- lea dummy,a1
- CALL CloseDevice,SysBase(a4)
-
- clr.l (a3)+
- lea -22(a3),a2
- moveq #18,d2
- bsr sortlist
-
- lea buffer,a5
- 5$ move.l (a5)+,d0
- beq.s 6$
- bsr hexa
- move.w (a5)+,d0
- ext.l d0
- mulu #9,d0
- add.w #timerunits,d0
- bsr putstrw
- move.l (a5)+,d0
- bsr putstamp
- moveq #'.',d0
- bsr putchar
- move.l (a5)+,d0
- move.l #100000,d1
- bsr div
- or.l #'0',d0
- bsr putchar
- 10$ bsr putblank
- move.l (a5)+,d0
- bsr getaskname2
- bsr newline
- bra.s 5$
- 6$ rts
-
- gettrq CALL Disable,SysBase(a4)
- 3$ move.l 0(a5),a5
- tst.l 0(a5)
- beq.s 4$
- move.l a5,(a3)+
- move.w d4,(a3)+
- move.l 32(a5),(a3)+
- move.l 36(a5),(a3)+
- move.l 14(a5),a1
- move.l 16(a1),(a3)+
- bra.s 3$
- 4$ CALL Enable,SysBase(a4)
- rts
-
-
- ;check if the timer is runnig, start it if not
- starttimer lea timerio,a1
- cmp.b #5,8(a1)
- beq.s 1$
- moveq #0,d0
- move.b timeout(a4),d0
- bne.s 2$
- tst.l timeoutm(a4)
- beq.s 1$
- 2$ move.l d0,32(a1)
- move.l timeoutm(a4),36(a1)
- move.w #9,28(a1)
- CALL SendIO,SysBase(a4)
- 1$ rts
- ;Abort a timer request, if pending
- stoptimer lea timerio,a1
- cmp.b #5,8(a1)
- bne.s 1$
- CALL AbortIO,SysBase(a4)
- lea timerio,a1
- CALL WaitIO,SysBase(a4)
- 1$ move.w timersig(a4),d0
- moveq #0,d1
- bset d0,d1
- moveq #0,d0
- CALL SetSignal,SysBase(a4)
- rts
- ;Xoper main loop, process all incoming messages
- processmsgs move.l wnptr(a4),a0
- moveq #0,d0
- move.w intuisig(a4),d1
- bset d1,d0
- bset #mysignal,d0
- move.w timersig(a4),d1
- bset d1,d0
- or.w #4096,d0
- or.l auxsig(a4),d0
- tst.l auxsig(a4)
- bne.s 1$
- or.l trapsignal(a4),d0
- 1$ CALL Wait,SysBase(a4)
-
- move.l d0,tasksigs(a4)
-
- move.l trapsignal(a4),d1
- and.l d0,d1
- beq.s ctrl_c
- tst.b gotguru(a4)
- bne.s ctrl_c
- move.b #1,gotguru(a4)
- bsr showguru
- clr.b gotguru(a4)
-
- ctrl_c moveq #12,d1
- bsr testsig
- bne exit
-
- moveq #mysignal,d1
- bsr testsig
- beq.s timermsg
- move.l d0,-(a7)
- move.l screenptr(a4),d0
- beq.s 1$
- move.l d0,a0
- CALL ScreenToFront,intuibase(a4)
- bra.s 2$
- 1$ move.l wnptr(a4),d0
- beq.s timermsg
- move.l d0,a0
- CALL WindowToFront,intuibase(a4)
- 2$ move.l (a7)+,d0
-
- timermsg move.w timersig(a4),d1
- bsr testsig
- beq intuimsgs
- btst.w #8,propinfo
- bne.s 3$
- tst.w repeat(a4)
- bne.s 1$
- bsr showwhat
- bra.s intuimsgs
- 1$ move.w repeatlen(a4),d0
- lea repeatbuffer,a2
- lea dummy,a1
- move.w d0,d1
- 2$ move.b (a2)+,(a1)+
- dbf d1,2$
- bsr cli
- 3$ bsr starttimer
-
- intuimsgs move.w intuisig(a4),d1
- bsr testsig
- beq processnxtmsg
- nextimsg move.l wnptr(a4),a0
- move.l $56(a0),a0
- CALL GetMsg,SysBase(a4)
- tst.l d0
- beq processnxtmsg
- move.l d0,intuimsg(a4)
-
- move.l d0,a0
- move.l 20(a0),d0
-
- cmp.l #$200,d0 ;CloseWindow
- bne.s 1$
- tst.b addlines(a4)
- beq exitall
- move.b #1,cbreak
- bra intuiend
-
- 1$ cmp.l #2,d0 ;ResizeWindow
- bne.s 1010$
- tst.b post_V34(a4)
- beq.s 3443$
- move.l wnptr(a4),a0
- move.l minwsize(a4),d0
- cmp.w 10(a0),d0
- bne.s 3443$
- swap d0
- cmp.w 8(a0),d0
- bne.s 3443$
- bsr replyintui ;window was 'zipped'
- bsr stoptimer
- bra instback
-
- 3443$ bsr setupscreen
- bra intuiend
-
- 1010$ cmp.l #$10,d0
- bne.s 2$
- btst.w #8,propinfo
- beq.s 1002$
- jsr proppos
- bra.s 1002$
-
- 2$ cmp.l #4,d0 ;refresh
- bne.s 22$
- bsr putiline
- bsr blastout
- bsr UpdateIArea
- 1002$ bra intuiend
-
- 22$ tst.b addlines(a4)
- bne 3$
- cmp.l #$20,d0 ;gadgetdown
- bne.s 1000$
- tst.w getanswer(a4)
- bne.s 3$
- move.l 28(a0),a1
- cmp.w #3,38(a1) ;Slidebar
- bne.s 1002$
- tst.b propgadon(a4)
- beq.s 1002$
- jsr proppos
- 1004$ bra.s 1002$
-
- 1000$ cmp.l #$40,d0 ;gadgetup
- bne.s 3$
- move.l 28(a0),a1
- cmp.w #3,38(a1) ;Slidebar ?
- bne.s 1003$
- bclr.w #8,propinfo ;clear 'knop hit' bit
- bra.s 1004$
- 1003$ bsr replyintui ;iconify
- bsr stoptimer
- bra instback
-
- 3$ cmp.l #$400,d0 ;RawKey
- bne notarawkey
- move.w #$80,d0
- and.w 24(a0),d0
- bne intuiend
- and.w #$7f,24(a0)
- lea ievent,a1
- move.b #1,4(a1)
- move.l 24(a0),6(a1)
- move.w 26(a0),qualifier(a4)
- move.l a1,a0
- lea outevent,a1
- moveq #20,d1
- suba.l a2,a2
- CALL RawKeyConvert,condev(a4)
- tst.l d0
- beq intuiend
- lea inputbuffer,a1
- lea outevent,a2
- move.w curpos(a4),d4
- moveq #0,d3
- tst.b addlines(a4)
- bne 197$
-
- sub.w #1,cmdcompflag(a4)
-
- cmp.b #$9b,0(a2) ;SI code
- bne 110$
-
- cmp.b #'?',1(a2) ;help
- bne.s 399$
- tst.w getanswer(a4)
- bne.s 399$
- bsr stoptimer
- tst.w bottomin(a4)
- bne.s 398$
- move.w #1,bottomin(a4)
- clr.w ibufferlen(a4)
- clr.w curpos(a4)
- bsr UpdateIArea
- 398$ move.w #usetxt,d0
- bsr putnamw
- clr.l lastprinted(a4)
- bsr blastout
- bra.s 420$
-
- 399$ cmp.b #'C',1(a2) ;cursor right
- bne.s 400$
- cmp.w ibufferlen(a4),d4
- bge.s 420$
- addq #1,d4
- 421$ move.w d4,curpos(a4)
- 420$ bra 100$
-
- 400$ cmp.b #'D',1(a2) ;cursor left
- bne.s 401$
- subq #1,d4
- bpl.s 421$
- bra.s 420$
-
- 401$ cmp.b #' ',1(a2)
- bne.s 402$
-
- cmp.b #'@',2(a2) ;shift right
- bne.s 403$
-
- 404$ cmp.w ibufferlen(a4),d4
- bge.s 421$
- addq #1,d4
- cmp.b #' ',0(a1,d4)
- bne.s 404$
- 405$ cmp.w ibufferlen(a4),d4
- bge.s 421$
- addq #1,d4
- cmp.b #' ',0(a1,d4)
- beq.s 405$
- bra.s 421$
-
- 403$ cmp.b #'A',2(a2) ;shift left
- bne.s 420$
- 406$ tst.w d4
- beq.s 421$
- subq #1,d4
- cmp.b #' ',0(a1,d4)
- beq.s 406$
- 407$ tst.w d4
- beq.s 421$
- subq #1,d4
- cmp.b #' ',0(a1,d4)
- bne.s 407$
- addq #1,d4
- bra.s 421$
-
- 402$ cmp.b #'A',1(a2) ;cursor up
- bne.s 408$
- tst.w bottomin(a4)
- bne.s 480$
- tst.w curpos(a4)
- bne.s 480$
-
- clr.w curpos(a4)
- clr.w ibufferlen(a4)
- bsr UpdateIArea
- bsr clrcursor
- move.w edline(a4),d3
- ext.l d3
- tst.w d3
- beq.s 481$
- subq #1,d3
- cmp.l firstline(a4),d3
- bge.s 481$
- move.l d3,-(a7)
- subq.l #1,firstline(a4)
- bsr blastout
- move.l (a7)+,d3
- 481$ move.w d3,edline(a4)
- bsr getcurpos
- bsr putcursor
- bra intuiend
- 480$ move.l history(a4),a0
- tst.l 0(a0)
- beq.s 423$
- move.l curhist(a4),a1
- cmp.l a0,a1
- beq.s 409$
- move.l 4(a1),d0
- move.l d0,curhist(a4)
- 409$ move.l a1,gothline(a4)
- bsr copyhistory
- 423$ bra 100$
-
- 408$ cmp.b #'B',1(a2) ;cursor down
- bne 410$
- tst.w bottomin(a4)
- bne.s 414$
- tst.w curpos(a4)
- bne.s 414$
-
- clr.w curpos(a4)
- clr.w ibufferlen(a4)
- bsr UpdateIArea
- bsr clrcursor
- move.w edline(a4),d3
- ext.l d3
- move.l numlines(a4),d4
- subq #1,d4
- cmp.l d4,d3
- beq.s 490$
- move.l firstline(a4),d2
- add.w rows(a4),d2
- subq #1,d2
- addq #1,d3
- cmp.w d2,d3
- ble.s 490$
- move.l d3,-(a7)
- addq.l #1,firstline(a4)
- bsr blastout
- move.l (a7)+,d3
- 490$ bra 481$
- 414$ move.l curhist(a4),d0
- beq.s 423$
- move.l d0,a1
- move.l 0(a1),a1
- tst.l 0(a1)
- bne.s 411$
- clr.l gothline(a4)
- clr.w curpos(a4)
- clr.w ibufferlen(a4)
- bra 423$
- 411$ move.l a1,curhist(a4)
- bra 409$
-
- 410$ cmp.b #'T',1(a2) ;shift up
- bne.s 412$
- tst.w hnum(a4)
- beq 423$
- move.l history(a4),a1
- move.l a1,curhist(a4)
- bra 409$
-
- 412$ cmp.b #'S',1(a2) ;shift down
- bne.s 440$
- tst.w hnum(a4)
- beq 423$
- move.l history+8(a4),curhist(a4)
- bra.s 414$
-
- 440$ cmp.b #'0',1(a2) ;function keys
- bmi 423$
- cmp.b #'9',1(a2)
- bgt 423$
- lea 1(a2),a0
- bsr getnum
- lea fkeys(a4),a0
- 441$ move.l 0(a0),a0
- tst.l 0(a0)
- beq 100$
- cmp.b 8(a0),d2
- bne.s 441$
-
- move.b 9(a0),d5
- ext.w d5
- subq #1,d5
- lea 10(a0),a0
- move.w curpos(a4),d4
- lea inputbuffer,a2
- moveq #0,d3
- lea 0(a2,d4),a2
- 445$ move.b (a0)+,d0
- cmp.b #'^',d0
- bne.s 442$
- moveq #1,d3
- bra.s 443$
- 442$ cmp.b #'_',d0
- bne.s 444$
- move.b #' ',d0
- 444$ move.b d0,(a2)+
- addq #1,d4
- 443$ dbf d5,445$
- move.w d4,curpos(a4)
- cmp.w ibufferlen(a4),d4
- ble.s 446$
- move.w d4,ibufferlen(a4)
- 446$ tst d3
- beq 100$
- bra got_fkey
-
- 110$ moveq #0,d3
- 101$ move.w curpos(a4),d4
- tst d0
- beq 100$
- cmp.b #13,0(a2,d3) ;return
- beq got_enter
-
- cmp.b #27,0(a2,d3) ;esc
- bne 799$
- tst.w getanswer(a4)
- bne 100$
- clr.b insmode(a4)
- clr.w ibufferlen(a4)
- move.w #200,curpos(a4)
- bsr UpdateIArea
- clr.w curpos(a4)
- tst.w bottomin(a4)
- bne.s 700$
- move.w #1,bottomin(a4)
- bsr getcurpos
- cmp.b #5,timerstate(a4)
- bne.s 765$
- bsr starttimer
- 765$ bra 100$
-
- 700$ move.b timerio+8,timerstate(a4)
- bsr stoptimer
- move.w edline(a4),d0
- move.l firstline(a4),d4
- cmp.w d4,d0
- bmi.s 701$
- move.w d4,d5
- add.w rows(a4),d5
- cmp.w d5,d0
- bmi.s 702$
- 701$ move.w rows(a4),d0
- lsr.w #1,d0
- add.w d4,d0
- 702$ move.l numlines(a4),d3
- subq #1,d3
- cmp.w d3,d0
- ble.s 703$
- move.w d3,d0
- 703$ move.w d0,edline(a4)
- sub.w d4,d0
- lsl.w #3,d0
- add.w #18,d0
- move.w d0,cposy(a4)
- clr.w bottomin(a4)
- tst.w loffset(a4)
- beq.s 704$
- clr.w loffset(a4)
- bsr blastout
- 704$ bra 100$
-
- 799$ cmp.b #8,0(a2,d3) ;Backspace
- bne.s 114$
- tst.w d4
- beq 102$
- bsr delchar
- subq #1,d4
- move.w d4,curpos(a4)
- bra 102$
-
- 114$ cmp.b #127,0(a2,d3) ;del
- bne.s 150$
- 178$ cmp.w ibufferlen(a4),d4
- bge 102$
- addq #1,d4
- bsr delchar
- bra 102$
-
- 150$ cmp.b #9,0(a2,d3) ;tab
- bne 197$
- move.w cmdcompflag(a4),d0
- bpl.s 151$
- lea inputbuffer,a0
- move.w ibufferlen(a4),d0
- bsr tolower
- move.w curpos(a4),cmdcomplen(a4)
- 151$ move.w #1,cmdcompflag(a4)
- 155$ move.w cmdcompnr(a4),d0
- bsr getcmdptr
- move.l d0,a0
- move.w cmdcomplen(a4),d4
- lea inputbuffer,a1
- subq #1,d4
- 152$ tst.b 0(a0)
- beq.s 153$
- cmp.b (a0)+,(a1)+
- bne.s 153$
- dbf d4,152$
- move.l d0,a1
- lea inputbuffer,a0
- 154$ move.b (a1)+,(a0)+
- dbeq.s d4,154$
- neg.w d4
- subq #1,d4
- move.w d4,curpos(a4)
- move.w d4,ibufferlen(a4)
- add.w #1,cmdcompnr(a4)
- cmp.w #cmdnum,cmdcompnr(a4)
- beq.s 156$
- bra 100$
- 153$ move.w cmdcompnr(a4),d0
- addq #1,d0
- move.w d0,cmdcompnr(a4)
- cmp.w #cmdnum,d0
- bmi.s 155$
- 156$ clr.w cmdcompnr(a4)
- bra 100$
-
- 197$ cmp.b #3,0(a2,d3) ;ctrl c
- bne.s 104$
- move.b #1,cbreak(a4)
-
- 104$ tst.b addlines(a4)
- bne processnxtmsg
- cmp.b #$18,0(a2,d3) ;ctrl x
- bne.s 300$
- clr.w ibufferlen(a4)
- clr.w curpos(a4)
- bra 100$
-
- 300$ cmp.b #$19,0(a2,d3) ;ctrl y
- bne.s 106$
- move.w curpos(a4),ibufferlen(a4)
- bra 100$
-
- 106$ move.w #$100,d5 ;NumPad
- and.w qualifier(a4),d5
- beq 105$
- move.l firstline(a4),d5
-
- cmp.b #'7',0(a2,d3) ;'Home'
- bne.s 200$
- moveq #0,d5
- 199$ cmp.l firstline(a4),d5
- beq.s 196$
- move.l d5,firstline(a4)
- bsr blastout
- tst.w bottomin(a4)
- bne.s 196$
- move.w edline(a4),d0
- move.l firstline(a4),d1
- cmp.w d1,d0
- bmi.s 190$
- add.w rows(a4),d1
- cmp.w d1,d0
- bmi.s 192$
- 190$ clr.w curpos(a4)
- clr.w ibufferlen(a4)
- move.w rows(a4),d0
- lsr.w #1,d0
- ext.l d0
- add.l firstline(a4),d0
- cmp.l numlines(a4),d0
- bmi.s 191$
- move.l numlines(a4),d0
- subq #1,d0
- 191$ move.w d0,edline(a4)
- 192$ bsr getcurpos
- bsr UpdateIArea
- 196$ bra 100$
-
- 200$ cmp.b #'8',0(a2,d3) ;'up arrow'
- bne.s 201$
- tst d5
- beq 100$
- subq #1,d5
- 1990$ bra.s 199$
-
- 201$ cmp.b #'9',0(a2,d3) ;'PgUp'
- bne.s 203$
- sub.w rows(a4),d5
- bpl.s 1990$
- moveq #0,d5
- bra.s 1990$
-
- 203$ cmp.b #'1',0(a2,d3) ;'End'
- bne.s 205$
- 222$ move.l numlines(a4),d5
- sub.w rows(a4),d5
- bpl 199$
- moveq #0,d5
- 204$ bra 199$
-
- 205$ cmp.b #'2',0(a2,d3) ;'down arrow'
- bne.s 206$
- move.l d5,d2
- add.w rows(a4),d2
- cmp.l numlines(a4),d2
- bge 100$
- addq #1,d5
- bra 199$
-
- 206$ cmp.b #'3',0(a2,d3) ;'PgDn'
- bne.s 500$
- add.w rows(a4),d5
- move.l d5,d2
- add.w rows(a4),d2
- cmp.l numlines(a4),d2
- bge.s 222$
- bra 199$
-
- 500$ cmp.b #'4',0(a2,d3) ;left arrow
- bne.s 501$
- tst.w bottomin(a4)
- beq 102$
- move.w loffset(a4),d2
- sub.w colms(a4),d2
- bpl.s 502$
- moveq #0,d2
- 502$ move.w d2,loffset(a4)
- bsr blastout
- bra 100$
-
- 501$ cmp.b #'6',0(a2,d3) ;right arrow
- bne.s 170$
- tst.w bottomin(a4)
- beq 102$
- move.w loffset(a4),d2
- add.w colms(a4),d2
- bra.s 502$
-
- 170$ cmp.b #'0',0(a2,d3) ;Ins
- bne.s 177$
- bchg.b #0,insmode(a4)
- bra.s 102$
-
- 177$ cmp.b #'.',0(a2,d3) ;Del
- beq 178$
-
- 105$ tst.w bottomin(a4)
- bne.s 777$
- tst.w curpos(a4)
- bne.s 777$
- movem.l d0-d1,-(a7)
- move.w edline(a4),d0
- bsr findline
- movem.l (a7)+,d0-d1
- tst.l 8(a5)
- beq intuiend
- 777$ move.w curpos(a4),d5
- ext.l d5
- moveq #79,d2
- cmp.w d2,d5
- bge 102$
- tst.b insmode(a4)
- beq.s 172$
- cmp.w ibufferlen(a4),d5
- bmi.s 171$
- bra.s 173$
- 172$ sub d5,d2
- lea 80(a1),a5
- lea 79(a1),a3
- 103$ move.b -(a3),-(a5)
- dbf d2,103$
- 173$ addq.w #1,ibufferlen(a4)
- 171$ move.b 0(a2,d3),0(a1,d5)
- addq.w #1,curpos(a4)
- 102$ subq #1,d0
- addq #1,d3
- bra 101$
-
- 100$ bsr UpdateIArea
- bra intuiend
-
- got_enter bsr puthist
- got_fkey bsr stoptimer
- clr.b insmode(a4)
- lea dummy,a1
- lea inputbuffer,a2
- move.w ibufferlen(a4),d2
- beq.s 2$
- tst.w bottomin(a4)
- bne.s 5$
- movem.l a1-a2,-(a7)
- move.w edline(a4),d0
- bsr findline
- move.l 8(a5),d0
- bsr gthex
- lea hexarea(a4),a0
- lea 0(a2,d2),a1
- move.b #' ',(a1)+
- move.b #'$',(a1)+
- moveq #8,d0
- CALL CopyMem,SysBase(a4)
- move.w ibufferlen(a4),d2
- add.w #10,d2
- move.w d2,ibufferlen(a4)
- movem.l (a7)+,a1-a2
- 5$ subq #1,d2
- 1$ move.b (a2)+,(a1)+
- dbf d2,1$
- 2$ move.b #10,(a1)+
- move.w ibufferlen(a4),d0
- ext.l d0
- addq #1,d0
- move.l d0,-(a7)
- clr.w ibufferlen(a4)
- tst.w bottomin(a4)
- bne.s 4$
- move.w #100,curpos(a4)
- bsr UpdateIArea
- 4$ clr.w curpos(a4)
- move.w #1,bottomin(a4)
- bsr getcurpos
- bsr UpdateIArea
- move.l (a7)+,d0
- move.w d0,repeatlen(a4)
- clr.w repeat(a4)
- clr.b printed(a4)
- tst.w getanswer(a4)
- beq.s 6$
- rts
- 6$ bsr cli
- tst.b printed(a4)
- bne.s 3$
- bsr starttimer
- 3$ bra intuiend
-
- notarawkey
-
- intuiend bsr.s replyintui
- bra nextimsg
- processnxtmsg
- tst.b addlines(a4)
- beq.s 1$
- rts
- 1$ tst.b propupdate(a4)
- beq.s 2$
- clr.b propupdate(a4)
- tst.b propgadon(a4)
- beq.s 2$
- jsr setprop
- 2$ bra processmsgs
-
- replyintui move.l intuimsg(a4),d0
- beq.s 1$
- move.l d0,a1
- CALL ReplyMsg,SysBase(a4)
- 1$ clr.l intuimsg(a4)
- rts
-
- ;put an input line into the history buffer
- puthist move.w ibufferlen(a4),d5
- move.l d5,d0
- cmp.w minnumchars(a4),d0
- bcs 1$
-
- move.l gothline(a4),d1
- beq.s 5$
- move.l d1,a2
- cmp.w 8(a2),d5
- bne.s 5$
- lea 10(a2),a2
- lea inputbuffer,a1
- subq #1,d0
- 6$ cmp.b (a2)+,(a1)+
- bne.s 5$
- dbf d0,6$
- move.l gothline(a4),curhist(a4)
- bra.s 1$
-
- 5$ move.w d5,d0
- ext.l d0
- add #10,d0
- move.l #$10000,d1 ;MEMF_CLEAR
- CALL AllocMem,SysBase(a4)
- tst.l d0
- beq.s 1$
- move.l d0,a0
- move.w d5,8(a0)
- lea 10(a0),a2
- subq #1,d5
- lea inputbuffer,a1
- 2$ move.b (a1)+,(a2)+
- dbf d5,2$
- move.w hnum(a4),d5
- cmp.w maxhlines(a4),d5
- bmi.s 3$
- bsr remhistline
- bra.s 4$
- 3$ addq #1,d5
- move.w d5,hnum(a4)
- 4$ move.l d0,a1
- move.l d0,curhist(a4)
- lea history(a4),a0
- CALL AddTail,SysBase(a4)
- 1$ clr.l gothline(a4)
- rts
-
- ;copy a history line into the input buffer
- copyhistory lea inputbuffer,a0
- move.w 8(a1),d3
- ext.l d3
- move.w d3,curpos(a4)
- move.w d3,ibufferlen(a4)
- subq #1,d3
- lea 10(a1),a1
- 1$ move.b (a1)+,(a0)+
- dbf d3,1$
- rts
- ;remove one line from the history buffer
- ;pointer to the line in A1, returns pointer to the next line in d1
- remhistline move.l d0,-(a7)
- lea history(a4),a0
- move.l 0(a0),a5
- tst.l 0(a5)
- beq.s 1$
- CALL RemHead,SysBase(a4)
- move.l a5,a1
- move.w 8(a1),d0
- add #10,d0
- ext.l d0
- CALL FreeMem,SysBase(a4)
- 1$ move.l (a7)+,d0
- rts
-
- ;kill all history lines
- killhistory bsr remhistline
- move.l history(a4),a0
- tst.l 0(a0)
- bne.s killhistory
- 2$ clr.w hnum(a4)
- clr.l curhist(a4)
- rts
- ;delete one char from the input line
- delchar lea inputbuffer,a3
- lea 0(a3,d4.w),a3
- lea -1(a3),a5
- move d4,d5
- 1$ cmp.w #78,d5
- bge.s 2$
- move.b (a3)+,(a5)+
- addq #1,d5
- bra.s 1$
- 2$ subq.w #1,ibufferlen(a4)
- rts
-
- testsig move.l tasksigs(a4),d0
- btst d1,d0
- rts
-
- ;get the position of the input area
- iareapos move.l wnptr(a4),a0
- move.w 10(a0),d0
- subq #4,d0
- move.w d0,ipos(a4)
- rts
-
- ;Update the current position of the input line
- getcurpos tst.w bottomin(a4)
- beq.s 1$
- move.w ipos(a4),cposy(a4)
- rts
- 1$ move.w edline(a4),d3
- sub.l firstline(a4),d3
- lsl #3,d3
- add.w #18,d3
- move.w d3,cposy(a4)
- rts
- ;refresh the input area
- UpdateIArea move.l rastport(a4),a1
- move.l #1,d0
- CALL SetDrMd,gfxbase(a4)
- moveq #6,d0
- move.w cposy(a4),d1
- move.l rastport(a4),a1
- CALL Move,gfxbase(a4)
- lea inputbuffer,a0
- move.w ibufferlen(a4),d0
- ext.l d0
- move.w colms(a4),d1
- sub.w bottomin(a4),d1
- cmp.w d1,d0
- bmi.s 1$
- move.w d1,d0
- 1$ move.w d0,d2
- move.l rastport(a4),a1
- CALL Text,gfxbase(a4)
-
- tst.w bottomin(a4)
- bne.s 3$
- move.w edline(a4),d0
- bsr findline
- move.w 12(a5),d3
- sub.w d2,d3
- bmi.s 3$
- move.w colms(a4),d1
- sub.w d2,d1
- bmi.s 2$
- cmp.w d1,d3
- ble.s 4$
- move.w d1,d3
- 4$ move.w d3,d0
- lea 14(a5,d2.w),a0
- move.l rastport(a4),a1
- CALL Text,gfxbase(a4)
- add.w ibufferlen(a4),d3
- move.w d3,d2
-
- 3$ move.w colms(a4),d0
- sub.w bottomin(a4),d0
- move.l blanks(a4),a0
- ext.l d0
- sub.w d2,d0
- bmi.s 2$
- lea 0(a0,d2.w),a0
- move.l rastport(a4),a1
- CALL Text,gfxbase(a4)
- 2$ bsr putcursor
- rts
-
- clrcursor moveq #1,d7
- bra.s ptc1
- putcursor moveq #6,d7
- ptc1 move.w curpos(a4),d0
- move.w colms(a4),d1
- subq #1,d1
- sub.w bottomin(a4),d1
- cmp.w d0,d1
- bmi.s 1$
- move.l rastport(a4),a1
- move.l d7,d0
- CALL SetDrMd,gfxbase(a4)
- move.w cposy(a4),d1
- move.w curpos(a4),d0
- lsl.w #3,d0
- addq #6,d0
- move.l rastport(a4),a1
- CALL Move,gfxbase(a4)
- lea oneblank(a4),a0
- moveq #1,d0
- move.l rastport(a4),a1
- CALL Text,gfxbase(a4)
- 1$ rts
- ;rebuild the window from scratch
- setupscreen move.l rastport(a4),a1
- moveq #0,d0
- CALL SetRast,gfxbase(a4)
- move.l wnptr(a4),a0
- CALL RefreshWindowFrame,intuibase(a4)
- bsr getwindowsize
- tst.w bottomin(a4)
- bne.s 1$
- move.w edline(a4),d0
- move.l firstline(a4),d1
- move.w rows(a4),d2
- move.w d2,d4
- move.w numlines(a4),d3
- add.w d1,d2
- cmp.w d2,d0
- bmi.s 2$
- lsr.w #1,d4
- sub.w d4,d0
- ext.l d0
- move.l d0,firstline(a4)
- 2$ bsr tstfirstlin
- 1$ bsr getcurpos
- bsr putiline
- bsr blastout
- bsr UpdateIArea
- move.w rows(a4),currenty(a4)
- rts
-
- putiline move.l rastport(a4),a1
- clr.l devicelock(a4)
- moveq #1,d0
- 0$ CALL SetAPen,gfxbase(a4)
- move.l rastport(a4),a1
- moveq #1,d0
- CALL SetDrMd,gfxbase(a4)
- move.l wnptr(a4),a5
- move.w 10(a5),d1
- sub.w #12,d1
- sub.l devicelock(a4),d1
- moveq #0,d0
- move.l rastport(a4),a1
- CALL Move,gfxbase(a4)
- move.w 8(a5),d0
- move.w d1,-(a7)
- move.l rastport(a4),a1
- CALL Draw,gfxbase(a4)
- move.w (a7)+,d1
- tst.b ownscreen(a4)
- bne.s 1$
- tst.b post_V34(a4)
- beq.s 2$
- tst.l devicelock(a4)
- bne.s 1$
- addq.l #1,devicelock(a4)
- moveq #2,d0
- bra.s 0$
-
- 2$ move.w 8(a5),d0
- addq #1,d1
- move.l rastport(a4),a1
- CALL Move,gfxbase(a4)
- sub.w #16,d0
- move.w d1,-(a7)
- move.l rastport(a4),a1
- CALL Draw,gfxbase(a4)
- move.w (a7)+,d1
- move.w 8(a5),d0
- addq #1,d1
- move.l rastport(a4),a1
- CALL Move,gfxbase(a4)
- sub.w #16,d0
- move.l rastport(a4),a1
- CALL Draw,gfxbase(a4)
- 1$ rts
-
- getwindowsize
- bsr freeblank
- move.l wnptr(a4),a0
- move.w 10(a0),d0
- sub.w #26,d0
- lsr.w #3,d0
- move.w d0,rows(a4)
- move.w 8(a0),d0
- sub.w #12,d0
- move.b post_V34(a4),d1
- ext.w d1
- sub.w d1,d0
- lsr.w #3,d0
- sub.b propgadon(a4),d0
- sub.w d1,d0
- move.w d0,colms(a4)
- ext.l d0
- moveq #0,d1
- move.l d0,d6
- CALL AllocMem,SysBase(a4)
- move.l d0,blanks(a4)
- move.l d0,a0
- subq #1,d6
- 1$ move.b #' ',(a0)+
- dbf d6,1$
- bsr iareapos
- rts
-
- readline move.b #'n',inputbuffer
- tst.b fromfile(a4)
- bne.s 1$
- move.l #31000,firstline(a4)
- bsr blastout
- move.w #1,getanswer(a4)
- bsr replyintui
- 5$ bsr processmsgs
- move.w d0,d5
- bsr replyintui
- subq #1,d5
- beq.s 5$
- ori.b #$20,inputbuffer
- clr.w getanswer(a4)
- bsr RestoreOutput
- 1$ rts
-
- ResumeOutput
- move.l outchain(a4),d0
- move.l d0,a1
- beq.s 2$
- move.l numlines(a4),oldnumlines(a4)
- move.l firstline(a4),oldfirstline(a4)
- 4$ tst.l 0(a1)
- beq.s 3$
- move.l 0(a1),a1
- bra.s 4$
- 3$ move.l a1,lastprinted(a4)
- 2$ move.l a1,oldpageend(a4)
- rts
-
- RestoreOutput
- move.l oldpageend(a4),d3
- beq.s 1$
- move.l oldnumlines(a4),numlines(a4)
- move.l oldfirstline(a4),firstline(a4)
- move.l oldlastprinted(a4),lastprinted(a4)
- move.l d3,a1
- move.l 0(a1),a1
- bsr killlines
- move.l d3,a1
- clr.l 0(a1)
- bsr blastout
- 1$ rts
-
- addline movem.l d0-d6/a0-a3,-(a7)
- move.l rastport(a4),a1
- moveq #1,d0
- CALL SetAPen,gfxbase(a4)
- move.l rastport(a4),a1
- moveq #1,d0
- CALL SetDrMd,gfxbase(a4)
- move.w currenty(a4),d6
- cmp.w rows(a4),d6
- bmi.s 1$
- bsr cls
- 1$ move.l lastprinted(a4),a0
- move.w colms(a4),d5
- move.w 12(a0),d3
- lea 14(a0),a0
- move.w currenty(a4),d6
- move d6,d7
- lsl #3,d6
- add.w #18,d6
- moveq #0,d4
- bsr blastline
- addq.w #1,currenty(a4)
- move.l #31000,firstline(a4)
- movem.l (a7)+,d0-d6/a0-a3
- rts
-
- cls movem.l d0-d6/a0-a3,-(a7)
- move.l rastport(a4),a1
- moveq #1,d0
- CALL SetAPen,gfxbase(a4)
- move.l rastport(a4),a1
- moveq #1,d0
- move.l rastport(a4),a1
- CALL SetDrMd,gfxbase(a4)
- move.w colms(a4),d5
- clr.w d2
- 1$ move.w d2,d6
- move d5,d7
- lsl #3,d6
- add.w #18,d6
- moveq #0,d3
- move.l blanks(a4),a0
- bsr blastline
- addq #1,d2
- cmp.w rows(a4),d2
- bmi.s 1$
- clr.w currenty(a4)
- movem.l (a7)+,d0-d6/a0-a3
- rts
-
- createscreen moveq #1,d1
- moveq #80,d0
- lea buffer,a0
- sub.l a1,a1
- CALL GetScreenData,intuibase(a4)
- move.w buffer+76,nsviewmode(a4)
- move.l buffer+12,nssize(a4)
- lea newscreen(a4),a0
- CALL OpenScreen,intuibase(a4)
- move.l d0,screenptr(a4)
- move.l d0,nwscreen(a4)
- move.w #$f,nwtype(a4)
- beq.s setupwindow
- tst.l wnptr(a4)
- beq.s 1$
- move.l wnptr(a4),a0
- move.l 4(a0),window_l(a4)
- move.l 8(a0),window_w(a4)
- CALL CloseWindow,intuibase(a4)
- clr.l intuimsg(a4)
- clr.l wnptr(a4)
- 1$ clr.l newwindow(a4)
- move.l buffer+12,newwindow+4(a4)
- move.l wnscrflags(a4),nwflgs(a4)
- move.l wnscrflags+4(a4),nwflgs+4(a4)
- move.b #1,ownscreen(a4)
-
- setupwindow tst.b ownscreen(a4)
- bne.s 3$
- move.l window_l(a4),newwindow(a4)
- move.l window_w(a4),newwindow+4(a4)
- move.w #1,nwtype(a4)
- move.l wnnormflgs(a4),nwflgs(a4)
- move.l wnnormflgs+4(a4),nwflgs+4(a4)
- 3$ lea newwindow(a4),a0
- CALL OpenWindow,intuibase(a4)
- move.l d0,wnptr(a4)
- beq exit
- move.l d0,a0
- move.l 50(a0),rastport(a4) ;wn->RPort
- move.l 86(a0),a1 ;wn->UserPort
- move.b 15(a1),d1 ;MsgPort->SigBit
- ext.w d1
- move.w d1,intuisig(a4)
-
- tst.b ownscreen(a4)
- bne.s 1$
- tst.b iconifyon(a4)
- beq.s 1$
- tst.b post_V34(a4)
- bne.s 1$
- lea iconifgad,a1
- moveq #0,d0
- CALL AddGadget,intuibase(a4)
- 1$ tst.b propgadon(A4)
- beq.s 4$
- lea sbgadget,a1
- move.l wnptr(a4),a0
- moveq #0,d0
- CALL AddGadget,intuibase(a4)
-
- 4$ move.l wnptr(a4),a0
- CALL RefreshWindowFrame,intuibase(a4)
-
- lea tattr(a4),a0
- CALL OpenFont,gfxbase(a4)
- tst.l d0
- beq.s 2$
- move.l d0,a0
- move.l rastport(a4),a1
- CALL SetFont,gfxbase(a4)
- 2$ bsr getwindowsize
- bsr getcurpos
-
- bsr putiline
- bsr UpdateIArea
- bsr starttimer
- bsr showwhat
- rts
-
- usescreen tst.b fromfile(a4)
- bne.s 1$
- tst.b ownscreen(a4)
- bne.s 1$
- bsr createscreen
- 1$ move.b #1,ownscreen(a4)
- rts
-
- usewindow tst.b fromfile(a4)
- beq.s 1$
- clr.b ownscreen(a4)
- rts
- 1$ tst.b ownscreen(a4)
- beq.s 2$
- move.l wnptr(a4),d0
- beq.s 3$
- move.l d0,a0
- CALL CloseWindow,intuibase(a4)
- clr.l wnptr(a4)
- clr.l intuimsg(a4)
- 3$ move.l screenptr(a4),d0
- beq.s 4$
- move.l d0,a0
- CALL CloseScreen,intuibase(a4)
- clr.l screenptr(a4)
- clr.b ownscreen(a4)
- 4$ bra setupwindow
- 2$ rts
-
- dchange lea dchead(a4),a0
- bsr puthead
- lea tdd(a4),a1
- move.l SysBase(a4),a0
- lea 350(a0),a0
- CALL FindName,SysBase(a4)
- tst.l d0
- beq R_T_S
- move.l d0,a2
- lea 32(a2),a2
- moveq #0,d5
- 2$ lea 4(a2),a2
- move.l 0(a2),d0
- beq 3$
- move.l d0,a0
- lea $18e(a0),a0
- CALL Disable,SysBase(a4)
- 5$ tst.l 0(a0)
- beq.s 6$
- move.l 0(a0),a0
- bra.s 5$
- 6$ lea -4(a0),a5
- lea buffer+100,a3
- 9$ move.l 0(a5),a5
- tst.l 0(a5)
- beq.s 11$
- move.l a5,(a3)+
- bne.s 9$
- 11$ clr.l (a3)+
- CALL Enable,SysBase(a4)
- lea buffer+100,a3
- 7$ move.l (a3)+,d0
- beq.s 3$
- move.l d0,a5
- cmp.w #20,28(a5)
- bne.s 7$
- move.l 40(a5),a3
- move.l a3,d0
- move.l d0,node(a4)
- bsr hexan
- move.l a3,d0
- beq.s 10$
- move.l 14(a3),d0
- bsr hexan
- move.l 18(a3),d0
- bsr hexan
- 10$ move.l d5,d3
- or.b #48,d3
- move.b d3,tddrives+2(a4)
- move.w #tddrives,d0
- bsr putstrw
- move.l 14(a5),d0
- beq.s 8$
- move.l d0,a0
- move.l 16(a0),d0
- 8$ bsr getaskname2
- bsr newline
- bra.s 7$
- 3$ addq #1,d5
- cmp.w #4,d5
- bmi 2$
- R_T_S rts
-
- gettdtasks lea tdd(a4),a1
- move.l SysBase(a4),a0
- lea 350(a0),a0
- CALL FindName,SysBase(a4)
- tst.l d0
- beq.s 2$
- move.l d0,a3
- lea 36(a3),a3
- lea tdtasks(a4),a5
- 1$ move.l (a3)+,d0
- beq.s 2$
- move.l d0,a2
- move.l 16(a2),(a5)+
- bra.s 1$
- 2$ rts
-
- putlongascii
- movem.l d1/d2,-(a7)
- moveq #2,d2
- move.b d0,d1
- 3$ lsr.l #8,d0
- lsl.l #8,d1
- move.b d0,d1
- dbf d2,3$
- moveq #3,d2
- 1$ move.b d1,d0
- beq.s 4$
- bsr putchar
- 4$ lsr.l #8,d1
- dbf d2,1$
- 2$ movem.l (a7)+,d1/d2
- rts
-
- putstamp movem.l d0-d1,-(a7)
- move.l #3600,d1
- bsr div
- moveq #3,d3
- bsr longdec
- move.l binarea+4(a4),d0
- lsr.l #8,d0
- bsr.s putlongascii
- moveq #':',d0
- bsr putchar
- move.l d1,d0
- moveq #60,d1
- bsr div
- bsr.s write2digs
- moveq #':',d0
- bsr putchar
- move.l d1,d0
- bsr write2digs
- movem.l (a7)+,d0-d1
- rts
-
- write2digs movem.l d0-d1,-(a7)
- divu #10,d0
- move.l d0,d1
- or.b #'0',d0
- bsr putchar
- swap d1
- or.b #'0',d1
- move.b d1,d0
- bsr putchar
- movem.l (a7)+,d0-d1
- rts
-
- starttasktimer
- lea tsecs(a4),a0
- lea tmics(a4),a1
- CALL CurrentTime,intuibase(a4)
- bsr getaskdat2
- move.l tsecs(a4),d0
- lea taskstampid,a0
- lea taskstamps,a1
- lea usedtime,a2
- moveq #0,d1
- 1$ subq.b #1,d5
- bmi.s 2$
- lea -16(a5),a5
- move.l 0(a5),(a0)+
- move.l d0,(a1)+
- clr.l (a2)+
- addq.w #1,d1
- cmp.w #128,d1
- bmi.s 1$
- 2$ move.w d1,numtaskstimed(a4)
- rts
-
- longdecn move.l d3,-(a7)
- moveq #3,d3
- bsr longdec
- move.l (a7)+,d3
- move.l #binarea+7+dataarea,d0
- sub.l d3,d0
- bra putstr
-
- getstackptr move.l a1,-(a7)
- move.l sysbase,a6
-
- move.l d0,a1 ;original stackpointer
- moveq #0,d0 ;offset 0 if no FPU
- btst #4,297(a6) ;AttnFlags FPU
- beq.s 1$ ;no FPU
-
- tst.b (a1) ;NULL frame ?
- beq.s 0$ ;yes
-
- move.w (a1),d0 ;frame flag / format word
- lea 110(a1),a1 ;offset to fpu regs
- cmp.w #-1,d0
- beq.s 3$
- lea 12(a1),a1 ;add 3 longs
-
- 3$ moveq #0,d0
- move.b 1(a1),d0 ;frame size
- lea 4(a1,d0),a1 ;680xx frame
- bra.s 2$
-
- 0$ moveq #4,d0 ;offset NULL frame
- 1$ lea 0(a1,d0),a1 ;680xx frame
-
- 2$ move.l a1,d0
- move.l (a7)+,a1
- rts
-
-
- killidle bra.s killidle
-
- dataarea:
- dosbase EQU *-dataarea
- .dosbase dc.l 0
- intuibase EQU *-dataarea
- .intuibase dc.l 0
- gfxbase EQU *-dataarea
- .gfxbase dc.l 0
- condev EQU *-dataarea
- .condev dc.l 0
- parmtxt EQU *-dataarea
- .parmtxt dc.l 0
- infile EQU *-dataarea
- .infile dc.l 0
- ptr EQU *-dataarea
- .ptr dc.l 0
- auxsig EQU *-dataarea
- .auxsig dc.l 0
- trapsignal EQU *-dataarea
- .trapsignal dc.l 0
- iostatus EQU *-dataarea
- .iostatus dc.l -1
- devstatus EQU *-dataarea
- .devstatus dc.l -1
- tasksigs EQU *-dataarea
- .tasksigs dc.l 0
- cancelbit EQU *-dataarea
- .cancelbit dc.l 0
- cancelbnum EQU *-dataarea
- .cancelbnum dc.l 0
- SysBase EQU *-dataarea
- _SysBase dc.l 0
- InputMsg EQU *-dataarea
- .InputMsg dc.l 0
- InRequest EQU *-dataarea
- .InRequest dc.l 0
- startmess EQU *-dataarea
- .startmess dc.l 0
- savedat EQU *-dataarea
- .savedat dc.l 0
- wnptr EQU *-dataarea
- .wnptr dc.l 0
- aliaslist EQU *-dataarea
- .aliaslist dc.l 0
- screenptr EQU *-dataarea
- .screenptr dc.l 0
- intuimsg EQU *-dataarea
- .intuimsg dc.l 0
- mytask EQU *-dataarea
- .mytask dc.l 0
- wbmsg EQU *-dataarea
- .wbmsg dc.l 0
- pointer EQU *-dataarea
- .pointer dc.l 0
- replyport EQU *-dataarea
- .replyport dc.l 0
- timerport EQU *-dataarea
- .timerport dc.l 0
- finfoptr EQU *-dataarea
- .finfoptr dc.l 0
- myseg EQU *-dataarea
- .myseg dc.l 0
- dispatches EQU *-dataarea
- .dispatches dc.l 0
- maxdisp EQU *-dataarea
- .maxdisp dc.l 0
- deltadisp EQU *-dataarea
- .deltadisp dc.l 0
- node EQU *-dataarea
- .node dc.l 0
- remembr EQU *-dataarea
- .remembr dc.l 0
- remembr2 EQU *-dataarea
- .remembr2 dc.l 0
- captask EQU *-dataarea
- .captask dc.l 0
- snoopport EQU *-dataarea
- .snoopport dc.l 0
- tasksnum EQU *-dataarea
- .tasksnum dc.l 0
- blanks EQU *-dataarea
- .blanks dc.l 0
- hidestart EQU *-dataarea
- .hidestart dc.l 0
- iocount EQU *-dataarea
- .iocount dc.l 0
- dummyinput EQU *-dataarea
- .dummyinput dc.l 0
- rastport EQU *-dataarea
- .rastport dc.l 0
- outchain EQU *-dataarea
- .outchain dc.l 0
- firstline EQU *-dataarea
- .firstline dc.l 0
- oldfirstline EQU *-dataarea
- .oldfirstline dc.l 0
- timeoutm EQU *-dataarea
- .timeoutm dc.l 0
- numlines EQU *-dataarea
- .numlines dc.l 0
- oldnumlines EQU *-dataarea
- .oldnumlines dc.l 0
- gothline EQU *-dataarea
- .gothline dc.l 0
- lastprinted EQU *-dataarea
- .lastprinted dc.l 0
- oldlastprinted EQU *-dataarea
- .oldlastprinted dc.l 0
- oldpageend EQU *-dataarea
- .oldpageend dc.l 0
- maxlines EQU *-dataarea
- .maxlines dc.l 500
- realstack EQU *-dataarea
- .realstack dc.l 0
- capiscli EQU *-dataarea
- .capiscli dc.l 0
- capseg EQU *-dataarea
- .capseg dc.l 0
- tdtasks EQU *-dataarea
- .tdtasks ds.l 4
- idletask EQU *-dataarea
- .idletask dc.l 0
- oldswitches EQU *-dataarea
- .oldswitches dc.l 0
- tsecs EQU *-dataarea
- .tsecs dc.l 0
- tmics EQU *-dataarea
- .tmics dc.l 0
- devicelock EQU *-dataarea
- .devicelock dc.l 0
- timerbase EQU *-dataarea
- .timerbase dc.l 0
- timerticks EQU *-dataarea
- .timerticks dc.l 0
-
- wnnormflgs EQU *-dataarea
- .wnnormflgs dc.l $646+$20+$10
- dc.l $1104f
-
- wnscrflags EQU *-dataarea
- .wnscrflags dc.l $640+$20+$10
- dc.l $31948
-
- fkeys EQU *-dataarea
- .fkeys dc.l *+4
- dc.l 0
- dc.l .fkeys
-
- history EQU *-dataarea
- .history dc.l *+4
- dc.l 0
- dc.l .history
- curhist EQU *-dataarea
- .curhist dc.l 0
-
- secs EQU *-dataarea
- .secs dc.l 0
- mics EQU *-dataarea
- .mics dc.l 0
- time10 EQU *-dataarea
- .time10 dc.l 0
-
- tattr EQU *-dataarea
- .tattr dc.l fontname+dataarea
- dc.w 8
- dc.w 0
-
- stplist EQU *-dataarea
- .stplist dc.l lh_tail
- lh_tail EQU *-dataarea
- .lh_tail dc.l 0
- dc.l .stplist
- dc.b 1
- dc.b 0
-
- InInterrupt EQU *-dataarea
- .InInterrupt dc.l 0 ;ln_Succ
- dc.l 0 ;ln_Pred
- dc.b 2 ;ln_Type
- dc.b 60 ;ln_Pri
- dc.l xopsleep+dataarea ;ln_Name
- dc.l 0 ;is_Data
- dc.l Keyhandler ;is_Code()
-
- IOCounter EQU *-dataarea
- .IOCounter dc.l 0 ;ln_Succ
- dc.l 0 ;ln_Pred
- dc.b 2 ;ln_Type
- dc.b -1 ;ln_Pri
- dc.l IOcntname+dataarea ;ln_Name
- dc.l 0 ;is_Data
- dc.l countio ;is_Code()
-
- newwindow EQU *-dataarea
- .newwindow dc.w 0,0
- dc.w 500,100
- dc.b 0,1
- nwflgs EQU *-dataarea
- .nwflgs dc.l $646|$20
- dc.l $1104f
- wn_firstgad EQU *-dataarea
- .wn_firstgad dc.l 0
- dc.l 0
- dc.l windowname+dataarea
- nwscreen EQU *-dataarea
- .nwscreen dc.l 0
- dc.l 0
- minwsize EQU *-dataarea
- .minwsize dc.w 110,50
- dc.w 808,-1
- nwtype EQU *-dataarea
- .nwtype dc.w 1
-
- newscreen EQU *-dataarea
- .newscreen dc.w 0,0
- nssize EQU *-dataarea
- .nssize dc.w 0,0
- dc.w 1
- dc.b 0
- dc.b 1
- nsviewmode EQU *-dataarea
- .nsviewmode dc.w 0
- dc.w $1f
- dc.l 0
- dc.l windowname+dataarea
- dc.l 0,0
-
- excpterror EQU *-dataarea
- .excpterror dc.l 0
- excpttask EQU *-dataarea
- .excpttask dc.l 0
- excptaddr EQU *-dataarea
- .excptaddr dc.l 0
- excptpc EQU *-dataarea
- .excptpc dc.l 0
-
- window_l EQU *-dataarea
- .window_l dc.w 0
- window_t EQU *-dataarea
- .window_t dc.w 0
- window_w EQU *-dataarea
- .window_w dc.w 550
- window_h EQU *-dataarea
- .window_h dc.w 200
-
- colms EQU *-dataarea
- .colms dc.w 0
- timersig EQU *-dataarea
- .timersig dc.w 0
- intuisig EQU *-dataarea
- .intuisig dc.w 0
- ibufferlen EQU *-dataarea
- .ibufferlen dc.w 0
- cposy EQU *-dataarea
- .cposy dc.w 0
- curpos EQU *-dataarea
- .curpos dc.w 0
- bottomin EQU *-dataarea
- .bottomin dc.w 1
- ipos EQU *-dataarea
- .ipos dc.w 0
- hnum EQU *-dataarea
- .hnum dc.w 0
- minnumchars EQU *-dataarea
- .minnumchars dc.w 2
- maxhlines EQU *-dataarea
- .maxhlines dc.w 10
- qualifier EQU *-dataarea
- .qualifier dc.w 0
- rows EQU *-dataarea
- .rows dc.w 0
- maxllength EQU *-dataarea
- .maxllength dc.w 0
- loffset EQU *-dataarea
- .loffset dc.w 0
- repeat EQU *-dataarea
- .repeat dc.w 0
- repeatlen EQU *-dataarea
- .repeatlen dc.w 0
- edline EQU *-dataarea
- .edline dc.w 999
- cmdptr EQU *-dataarea
- .cmdptr dc.w 0
- getanswer EQU *-dataarea
- .getanswer dc.w 0
- currenty EQU *-dataarea
- .currenty dc.w 0
- cmdcompnr EQU *-dataarea
- .cmdcompnr dc.w 0
- cmdcomplen EQU *-dataarea
- .cmdcomplen dc.w -1
- cmdcompflag EQU *-dataarea
- .cmdcompflag dc.w 0
- numtaskstimed EQU *-dataarea
- .numtaskstimed dc.w 0
- patchwhat EQU *-dataarea
- .patchwhat dc.w 0
- dosoffset EQU *-dataarea
- .dosoffset dc.w 0
-
- sampleio EQU *-dataarea
- .sampleio ds.b 40
-
- binarea EQU *-dataarea
- .binarea dc.b ' ',0
- EVEN
- minus EQU *-dataarea
- .minus dc.b ' '
- decimal EQU *-dataarea
- .decimal dc.b ' ',0
- entries EQU *-dataarea
- .entries dc.b 0
- timeout EQU *-dataarea
- .timeout dc.b 5
- procnum EQU *-dataarea
- .procnum dc.b 0
- timerstate EQU *-dataarea
- .timerstate dc.b 0
- running EQU *-dataarea
- .running dc.b 0
- newpri EQU *-dataarea
- .newpri dc.b 0
- tasktyp EQU *-dataarea
- .tasktyp dc.b 0
- background EQU *-dataarea
- .background dc.b 0
- bool EQU *-dataarea
- .bool dc.b 0
- printed EQU *-dataarea
- .printed dc.b 0
- cbreak EQU *-dataarea
- .cbreak dc.b 0
- usageflag EQU *-dataarea
- .usageflag dc.b 0
- mnflag EQU *-dataarea
- .mnflag dc.b 1
- tports EQU *-dataarea
- .tports dc.b 0
- headon EQU *-dataarea
- .headon dc.b 1
- hideoff EQU *-dataarea
- .hideoff dc.b 0
- sorton EQU *-dataarea
- .sorton dc.b 1
- wanttraps EQU *-dataarea
- .wanttraps dc.b 0
- addlines EQU *-dataarea
- .addlines dc.b 0
- fromfile EQU *-dataarea
- .fromfile dc.b 0
- iconifyon EQU *-dataarea
- .iconifyon dc.b 1
- gotguru EQU *-dataarea
- .gotguru dc.b 0
- ownscreen EQU *-dataarea
- .ownscreen dc.b 0
- insmode EQU *-dataarea
- .insmode dc.b 0
- cmdcli EQU *-dataarea
- .cmdcli dc.b 1
- capgone EQU *-dataarea
- .capgone dc.b 0
- capwaiting EQU *-dataarea
- .capwaiting dc.b 0
- tinfo EQU *-dataarea
- .tinfo dc.b 1
- cliexec EQU *-dataarea
- .cliexec dc.b 0
- propgadon EQU *-dataarea
- .propgadon dc.b 1
- propupdate EQU *-dataarea
- .propupdate dc.b 1
- finfopen EQU *-dataarea
- .finfopen dc.b -1
- post_V34 EQU *-dataarea
- .post_V34 dc.b 0
-
- params EQU *-dataarea
- .params dc.b 'tfdlrempiscua'
- parmnum equ *-dataarea-params
- .parmnum dc.b 0
-
- t2header EQU *-dataarea
- .t2header dc.b ' ID STATE SIGALLOC SIGWAIT SIGRECVD PC FPU TASKNAME',0
- t3header EQU *-dataarea
- .t3header dc.b ' ID STATE SIGALLOC SIGWAIT SIGRECVD PC TASKNAME',0
- t4header EQU *-dataarea
- .t4header dc.b ' ID STATE RUNNING ACTIVE NUM TASKNAME',0
- theader EQU *-dataarea
- .theader dc.b ' ID TYPE STATE PRI CPUSE NUM TASKNAME',0
- lheader EQU *-dataarea
- .lheader dc.b ' NODE CNT VER REV FLAGS ',0
- libnam EQU *-dataarea
- .libnam dc.b 'LIBRARY NAME',0
- devnam EQU *-dataarea
- .devnam dc.b 'DEVICE NAME',0
- resnam EQU *-dataarea
- .resnam dc.b 'RESOURCE NAME',0
- mheader EQU *-dataarea
- .mheader dc.b ' LOWER UPPER FREE ATTR PRI HUNK NAME',0
- cr EQU *-dataarea
- .cr dc.b 10,0
- iheader EQU *-dataarea
- .iheader dc.b ' NODE DATA CODE PRI T S TYPE INTERRUPT NAME',0
- inheader EQU *-dataarea
- .inheader dc.b ' NODE DATA CODE PRI NAME',0
- rheader EQU *-dataarea
- .rheader dc.b ' ADDR PRI FLAGS VER TYPE RESIDENT NAME',0
- pheader EQU *-dataarea
- .pheader dc.b ' NODE PORTNAME FLAGS SIGBT NUM SIGTASK',0
- hunkheader EQU *-dataarea
- .hunkheader dc.b ' NUM BCPL DATA LENGTH',0
- ddheader EQU *-dataarea
- .ddheader dc.b 'DEVICE HDS SECTORS TRACKS BUFFERS STATE HANDLER',0
- cdheader EQU *-dataarea
- .cdheader dc.b 'PROCESSNAME CURRENT DIRECTORY',0
- ofheader EQU *-dataarea
- .ofheader dc.b ' LOCK ACCESS SIZE PATH/FILENAME',0
- scrheader EQU *-dataarea
- .scrheader dc.b 'NUM ADDR SIZE DPTH TITLE',0
- wnheader EQU *-dataarea
- .wnheader dc.b ' ADDR OWNERTASK X Y SIZE TITLE',0
- fohead EQU *-dataarea
- .fohead dc.b ' NODE CNT Y X TYPE LO HI NAME',0
- kickhead EQU *-dataarea
- .kickhead dc.b 'START END LENGTH',0
- snoophead EQU *-dataarea
- .snoophead dc.b 'ACTION REQUIREMENTS LENGTH FROM TO CALLER',0
- stackhead EQU *-dataarea
- .stackhead dc.b 'SPLower SIZE USED TASKNAME',0
- clicomhead EQU *-dataarea
- .clicomhead dc.b ' ID STATE TYPE MODE NUM PROCESSNAME COMMAND',0
- tiohead EQU *-dataarea
- .tiohead dc.b 'IORQUEST UNIT SECS REQUESTING TASK',0
- dchead EQU *-dataarea
- .dchead dc.b ' NODE DATA CODE UNIT TASK',0
- alhead EQU *-dataarea
- .alhead dc.b 'ALIAS NAME COMMAND',0
- semhead EQU *-dataarea
- .semhead dc.b ' NODE OWNER QUEUE NEST NAME',0
- fraghead EQU *-dataarea
- .fraghead dc.b 'HEX SIZE DEC COUNT LARGEST',0
- fkhead EQU *-dataarea
- .fkhead dc.b 'KEY STRING',0
- fileshead EQU *-dataarea
- .fileshead dc.b ' TASK HANDLE MODE FILENAME',0
- tdd EQU *-dataarea
- .tdd dc.b 'trackdisk.device',0
- tddrives EQU *-dataarea
- .tddrives dc.b 'DF : ',0
- onstr EQU *-dataarea
- .onstr dc.b 'on',0
- offstr EQU *-dataarea
- .offstr dc.b 'off',0
- unitmsg EQU *-dataarea
- .unitmsg dc.b ' (Unit # )',0
- timerunits EQU *-dataarea
- .timerunits dc.b 'MicroHz ',0
- dc.b 'VBlank ',0
- fmode EQU *-dataarea
- dc.b ' R/W ',0
- access EQU *-dataarea
- .access dc.b ' Read ',0
- dc.b ' Write ',0
- romfnt EQU *-dataarea
- .romfnt dc.b 'Rom ',0
- diskfnt EQU *-dataarea
- .diskfnt dc.b 'Disk ',0
- ffixed EQU *-dataarea
- .ffixed dc.b 'Fixed ',0
- fprop EQU *-dataarea
- .fprop dc.b 'Propl ',0
- status EQU *-dataarea
- .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 'Frozen ',0
- dc.b 'Frozen ',0
- type EQU *-dataarea
- .type dc.b 'Unknown ',0
- tasktype EQU *-dataarea
- .tasktype 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
- softinttype EQU *-dataarea
- .softinttype dc.b 'Softint ',0
- dc.b 'Font ',0
- proctype EQU *-dataarea
- .proctype dc.b 'Process ',0
- dc.b 'Semaphore ',0
- mp_flags EQU *-dataarea
- .mp_flags dc.b 'Signal ',0
- dc.b 'Softint ',0
- dc.b 'Ignore ',0
- windowname EQU *-dataarea
- .windowname dc.b 'Xoper V2.3',$a9,' 1991 Werner G',$fc,'nther',0
- newname EQU *-dataarea
- .newname dc.b 'Xoper ',0
- memportname EQU *-dataarea
- .memportname dc.b 'SnoopPort',0
- xopcon EQU *-dataarea
- .xopcon dc.b 'XopPackets',0
- xopsleep EQU *-dataarea
- .xopsleep dc.b 'Xop-A-A-x',0
- IOcntname EQU *-dataarea
- .IOcntname dc.b 'Xop-I/O-counter',0
- kidlename EQU *-dataarea
- .kidlename dc.b 'Xop-Idle-Killer',0
-
- cmdnum set 0
- commds EQU *-dataarea
- .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 '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'
- ADDCMD 'inputhandler'
- ADDCMD 'header'
- ADDCMD 'sort'
- ADDCMD 'hide'
- ADDCMD 'hidden'
- ADDCMD 'window'
- ADDCMD 'kill'
- ADDCMD 'iconifyoff'
- ADDCMD 'historylines'
- ADDCMD 'minimumchars'
- ADDCMD 'showhistory'
- ADDCMD 'repeat'
- ADDCMD 'remresident'
- ADDCMD 'saveoutput'
- ADDCMD 'killhistory'
- ADDCMD 'backdropicon'
- ADDCMD 'setfont'
- ADDCMD 'trapguru'
- ADDCMD 'outputlines'
- ADDCMD 'usescreen'
- ADDCMD 'usewindow'
- ADDCMD 'timerio'
- ADDCMD 'diskchange'
- ADDCMD 'alias'
- ADDCMD 'remnode'
- ADDCMD 'setfkey'
- ADDCMD 'clicmd'
- ADDCMD 'taskinfo'
- ADDCMD 'coldreboot'
- ADDCMD 'reboot'
- ADDCMD 'zerotimer'
- ADDCMD 'propgadoff'
- ADDCMD 'iconpos'
- ADDCMD 'remport'
- ADDCMD 'remintserver'
- ADDCMD 'frags'
- ADDCMD 'traceopen'
- ADDCMD 'snoopmem'
- ADDCMD 'tracelock'
-
- IFNE ((tasktime-cmdaddr)/4)-cmdnum
- ERROR !! COMMAND NAME OR JUMP VECTOR MISSING !!
- ENDIF
-
- hexarea EQU *-dataarea
- .hexarea dc.b ' ',0
- hextab EQU *-dataarea
- .hextab dc.b '0123456789abcdef'
- infoh2 EQU *-dataarea
- .infoh2 dc.b 'Dispat/Sec:',0
- infoh1 EQU *-dataarea
- .infoh1 dc.b 'CPU:',0
- infoh3 EQU *-dataarea
- .infoh3 dc.b 'CPU activity: ',0
- infoh6 EQU *-dataarea
- .infoh6 dc.b 'Total:',0
- infoh4 EQU *-dataarea
- .infoh4 dc.b '% ',0
- infoh7 EQU *-dataarea
- .infoh7 dc.b 'I/O Ints/Sec: ',0
- cpu0 EQU *-dataarea
- .cpu0 dc.b '68000',0
- cpu1 EQU *-dataarea
- .cpu1 dc.b '68010',0
- cpu2 EQU *-dataarea
- .cpu2 dc.b '68020',0
- cpu3 EQU *-dataarea
- .cpu3 dc.b '68030',0
- cpu4 EQU *-dataarea
- .cpu4 dc.b '/68881',0
- cpu5 EQU *-dataarea
- .cpu5 dc.b '/68882',0
- nofpu EQU *-dataarea
- .nofpu dc.b '---- ',0
- nullstate EQU *-dataarea
- .nullstate dc.b 'NULL ',0
- idle EQU *-dataarea
- .idle dc.b 'IDLE ',0
- busy EQU *-dataarea
- .busy dc.b 'BUSY ',0
- weissnicht EQU *-dataarea
- .weissnicht dc.b '???? ',0
- devload EQU *-dataarea
- .devload dc.b 'loaded ',0
- devnload EQU *-dataarea
- .devnload dc.b 'unloaded ',0
- inten EQU *-dataarea
- .inten dc.b 'E ',0
- intdis EQU *-dataarea
- .intdis dc.b 'D ',0
- intserv EQU *-dataarea
- .intserv dc.b 'S ',0
- inthand EQU *-dataarea
- .inthand dc.b 'H ',0
- notfile EQU *-dataarea
- .notfile dc.b '--- ------- ------- ------- ',0
- longnix EQU *-dataarea
- .longnix dc.b '-'
- smallnix EQU *-dataarea
- .smallnix dc.b '----'
- nix EQU *-dataarea
- .nix dc.b '--- ',0
- noinfo EQU *-dataarea
- .noinfo dc.b 'No Info on'
- oneblank EQU *-dataarea
- .oneblank dc.b ' ',0
- equal EQU *-dataarea
- .equal dc.b '= ',0
- openbrak EQU *-dataarea
- .openbrak dc.b '[ ',0
- closebrak EQU *-dataarea
- .closebrak dc.b ' ]',0
- namerr EQU *-dataarea
- .namerr dc.b 'Unable to find ',0
- fonterr EQU *-dataarea
- .fonterr dc.b "Can't open ",0
- adrerr EQU *-dataarea
- .adrerr dc.b 'Address Error!',0
- aliaserr EQU *-dataarea
- .aliaserr dc.b 'Single character alias names using "',0
- aliaserr2 EQU *-dataarea
- .aliaserr2 dc.b '"',10,'are not allowed.',0
- noworkbench EQU *-dataarea
- .noworkbench dc.b "Workbench isn't active !",0
- openerr EQU *-dataarea
- .openerr dc.b 'Could not open file ',0
- noderr EQU *-dataarea
- .noderr dc.b "Can't find this Node. Continue anyway ? (Y/N)",0
- listerr EQU *-dataarea
- .listerr dc.b 'Unable to find ListHeader. Sort aborted.',0
- wiwerr EQU *-dataarea
- .wiwerr dc.b 'Script file only',0
- gurutxt EQU *-dataarea
- .gurutxt dc.b 'Guru Meditation #',0
- clrtxt EQU *-dataarea
- .clrtxt dc.b 'Memory Hunks cleared.',0
- canerr0 EQU *-dataarea
- .canerr0 dc.b 'Process is not a CLI-task',10
- dc.b 'Has it been started from Workbench ? (Y/N)',10,0
- canerr1 EQU *-dataarea
- .canerr1 dc.b 'Process was created by CreateProc()',10
- dc.b 'Shall I UnLoad() ? (Y/N)',10,0
- unloaderr EQU *-dataarea
- .unloaderr dc.b "Arrrgh.. can't find segments, aborting",0
- noprocs EQU *-dataarea
- .noprocs dc.b 'Not a Process.',0
- notload EQU *-dataarea
- .notload dc.b 'No program loaded.',0
- cliprocs EQU *-dataarea
- .cliprocs dc.b 'Cli-Process',0
- procloaded EQU *-dataarea
- .procloaded dc.b 'Loaded as a command: ',0
- segloaded EQU *-dataarea
- .segloaded dc.b 'Created by CreateProc()',0
- coldtxt EQU *-dataarea
- .coldtxt dc.b 'Cold Capture: ',0
- cooltxt EQU *-dataarea
- .cooltxt dc.b 'Cool Capture: ',0
- warmtxt EQU *-dataarea
- .warmtxt dc.b 'Warm Capture: ',0
- kicktxt EQU *-dataarea
- .kicktxt dc.b 'KickMem : ',0
- unset EQU *-dataarea
- .unset dc.b 'unset',0
- wbname EQU *-dataarea
- .wbname dc.b 'Workbench',0
- intnames EQU *-dataarea
- .intnames dc.b 'Serial Out ',0
- dc.b 'Disk Block ',0
- dc.b 'SoftInt ',0
- dc.b 'Ports ',0
- dc.b 'Coper ',0
- dc.b 'Vert.Blank ',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 'External ',0
- dc.b 'SoftInt ',0
- dc.b 'NMI ',0
- inttyp EQU *-dataarea
- .inttyp dc.b 0,0,1,1,1,1,0,0,0,0,0,0,0,1,1,1
- fontname EQU *-dataarea
- .fontname dc.b 'topaz.font',0
- devicenam EQU *-dataarea
- .devicenam dc.b 'input.device',0
- timernam EQU *-dataarea
- .timernam dc.b 'timer.device',0
- memlarg EQU *-dataarea
- .memlarg dc.b 'LARGEST ',0
- memclr EQU *-dataarea
- .memclr dc.b 'CLEAR ',0
- memfast EQU *-dataarea
- .memfast dc.b 'FAST ',0
- memchip EQU *-dataarea
- .memchip dc.b 'CHIP ',0
- mempubl EQU *-dataarea
- .mempubl dc.b 'PUBLIC ',0
- failed EQU *-dataarea
- .failed dc.b 'Failed !',0
- allok EQU *-dataarea
- .allok dc.b 'ALLOC: ',0
- free EQU *-dataarea
- .free dc.b 'FREE: ',0
- backg EQU *-dataarea
- .backg dc.b 'Bckg ',0
- foreg EQU *-dataarea
- .foreg dc.b 'Frgr ',0
- script EQU *-dataarea
- .script dc.b 'Batch ',0
- interact EQU *-dataarea
- .interact dc.b 'Intct ',0
- IFND DEBUG
- startupname EQU *-dataarea
- .startupname dc.b 'S:Xoper.Startup',0
- ENDC
- IFD DEBUG
- startupname EQU *-dataarea
- .startupname dc.b 'S:Test.Startup',0
- ENDC
- nameerr EQU *-dataarea
- .nameerr dc.b 'Name or address is missing.',10
- synerr EQU *-dataarea
- .synerr dc.b 'Syntax Error, type "?" for help',10,0
- dnotf EQU *-dataarea
- .dnotf dc.b 'Directory not found',0
- notdir EQU *-dataarea
- .notdir dc.b 'Not a directory',0
- nomount EQU *-dataarea
- .nomount dc.b ' not mounted.',0
- dishelp EQU *-dataarea
- .dishelp dc.b 10,'Names are case sensitive and followed by a ":"',0
- unlerr EQU *-dataarea
- .unlerr dc.b 'Lock not found',0
- unl1 EQU *-dataarea
- .unl1 dc.b 'Lock is on ',0
- unltxt EQU *-dataarea
- .unltxt dc.b 'Old lock was: ',0
- unltxt2 EQU *-dataarea
- .unltxt2 dc.b 'Unlock ? (Y/N)',10,0
- scnofound EQU *-dataarea
- .scnofound dc.b 'Screen not found.',0
- winnofound EQU *-dataarea
- .winnofound dc.b 'Window not found.',0
- stperr EQU *-dataarea
- .stperr dc.b 'Task must be "READY" or "WAITING"',10,0
- waerr EQU *-dataarea
- .waerr dc.b 'Task must be "FROZEN"',10,0
- whatsthis EQU *-dataarea
- .whatsthis dc.b '???.?',0
- toomuch EQU *-dataarea
- .toomuch dc.b '??? ',0
- timenotset EQU *-dataarea
- .timenotset dc.b ' disabled.',0
- whattime EQU *-dataarea
- .whattime dc.b 'Refresh time in secs:',0
- stoped EQU *-dataarea
- .stoped dc.b '<Break>',0
- capexited EQU *-dataarea
- .capexited dc.b 'Task ended',0
- capwait EQU *-dataarea
- .capwait dc.b 'Waiting for startup...',0
- onscr EQU *-dataarea
- .onscr dc.b 'On Screen: ',0
- whatnow EQU *-dataarea
- .whatnow dc.b 'Kill, ignore (K/I)?',0
- noguru EQU *-dataarea
- .noguru dc.b 'None found.',0
- softfail EQU *-dataarea
- .softfail dc.b 'Software failure!',10,'Task: ',0
- addrserr EQU *-dataarea
- .addrserr dc.b 'Bad aligned address was: ',0
- procount EQU *-dataarea
- .procount dc.b 'PC: ',0
- memtyp EQU *-dataarea
- .memtyp dc.b 'Memory type: ',0
- diskfont EQU *-dataarea
- .diskfont dc.b 'diskfont.library',0
- nintrserv EQU *-dataarea
- .nintrserv dc.b "Not a server. Can't restore vectors",0
- regnam EQU *-dataarea
- .regnam dc.b "PCD0D1D2D3D4D5D6D7A0A1A2A3A4A5A6SP"
- usetxt EQU *-dataarea
- .usetxt dc.b 'USAGE: Xoper [T] [F] [L] [D] [R] [E] [M] [P] [I] [S] [C] [U] [A]',10
- dc.b 'OR Xoper -b',10
- dc.b 'DISPLAY:',10
- dc.b '[T]asks task[F]lags [L]ibraries [D]evices [R]esources',10
- dc.b 'r[E]sident [M]emory [P]orts [I]nterrupts [S]tack',10
- dc.b '[C]litasks task[U]sage sem[A]phores [Q]uit',10,10
- dc.b 'OTHER SYSTEM LISTS:',10
- dc.b 'Windows Screens Fonts WindowFonts CurrentDir',10
- dc.b 'Files Locks Devices InputHandler Capture',10
- dc.b 'TimerIO DiskChange Frags TraceOpen TraceLock',10,10
- dc.b 'COMMANDS:',10
- dc.b 'Time <secs>',10
- dc.b 'Taskpri <priority> [processnum] <taskname>',10
- dc.b 'Mypri <priority>',10
- dc.b 'Signal <mask(hex)> [processnum] <taskname>',10
- dc.b 'Break [processnum] <taskname>',10
- dc.b 'Freeze|Warm [processnum] <taskname>',10
- dc.b 'Kill [processnum] <taskname>',10
- dc.b 'SnoopMem [processnum] <taskname>',10
- dc.b 'ZeroTimer [processnum] <taskname>',10
- dc.b 'Hide <taskname>',10
- dc.b 'Pri <priority> <nodename>',10
- dc.b 'Info <name>',10
- dc.b 'RemResident <resident module name>',10
- dc.b 'RemIntServer <interrupt address>',10
- dc.b 'Clear <longword(hex)>',10
- dc.b 'Hunks [processnum] <procname>',10
- dc.b 'CD <directory> [processnum] <procname>',10
- dc.b 'UnLock <lock>',10
- dc.b 'OpenLib | Closelib <libraryname>',10
- dc.b 'CloseWindow| Closescreen <title>',10
- dc.b 'SetFont [size] <fontname> <windowtitle>',10
- dc.b 'LockDrive | Freedrive <drivename:>',10
- dc.b 'Window <leftedge topedge width height> (scriptfile only) ',10
- dc.b 'IconPos <leftedge topedge>',10
- dc.b 'OutputLines <maximum # of lines>',10
- dc.b 'HistoryLines <maximum # of lines>',10
- dc.b 'MinimumChars <minimum # of characters>',10
- dc.b 'SaveOutput <filename>',10
- dc.b 'Repeat <Command line>',10
- dc.b 'SetFKey <number> <string>',10
- dc.b 'Alias [<aliasname> <commandname>]',10,10
- dc.b 'COMMANDS WITHOUT PARAMETERS:',10
- dc.b 'Flush LastAlert ClrCool ClrCold ClrWarm',10
- dc.b 'TrapGuru',10,10
- dc.b 'OPTIONS:',10
- dc.b 'Sort TaskPorts Hidden Usage Header',10
- dc.b 'IconifyOff BackDropIcon ShowHistory KillHistory UseScreen',10
- dc.b 'UseWindow CLICmd TaskInfo PropGadOff',10
- dc.b 'Hold Exit'
- null EQU *-dataarea
- .null dc.b 0
-
- IFD DEBUG
- dosname
- .dosname dc.b 'dos.library',0
- intuiname
- .intuiname dc.b 'intuition.library',0
- gfxname
- .gfxname dc.b 'graphics.library',0
- conname
- .conname dc.b 'console.device',0
- EVEN
- ENDC
-
- BSS Data
- mypacket
- 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
-
- buffer ds.b 2800
- out ds.b 100
- dummy ds.b 80
- in ds.b 80
- cputime ds.b 1000
- taskstampid ds.l 128
- taskstamps ds.l 128
- usedtime ds.l 128
- ievent ds.b 32
- outevent ds.b 20
- inputbuffer ds.b 88
- timerio ds.b 40
- repeatbuffer ds.b 81
-
- CODE ICONIFY,CHIP
-
- iconify lea icnwindow(PC),a0
- CALL OpenWindow,intuibase(a4)
- move.l d0,iconwindow
-
- waitforcall move.l iconwindow(PC),a0
- move.l $56(a0),a0 ;wn->UserPort
-
- moveq #0,d1
- move.l d1,d0
- move.b 15(a0),d1 ;UserPort->SigBit
- bset d1,d0
- move.l d0,d6
- or.l #(1<<mysignal),d0
- or.l trapsignal(a4),d0
- CALL Wait,SysBase(a4)
- and.l d0,d6
- bne.s fromwindow
- move.l #(1<<mysignal),d1
- and.l d0,d1
- bne icondone
- and.l trapsignal(a4),d0
- beq.s waitforcall
- move.b #1,gotguru(a4)
- bra.s icondone
-
- fromwindow move.l iconwindow,a0
- move.l $56(a0),a0 ;wn->UserPort
- CALL GetMsg,SysBase(a4)
- tst.l d0
- beq.s waitforcall
- move.l d0,a1
- CALL ReplyMsg,SysBase(a4)
-
- move.l iconwindow(PC),a0
- move.l 4(a0),d5
- cmp.l icnwindow(PC),d5
- bne.s 1$
- lea nsecs(PC),a0
- lea nmics(PC),a1
- CALL CurrentTime,intuibase(a4)
- movem.l osecs,d0-d3
- CALL DoubleClick,intuibase(a4)
- tst.l d0
- bne.s icondone
- move.l nsecs(PC),osecs
- move.l nmics(PC),omics
- 1$ move.l d5,icnwindow
- bra waitforcall
- icondone move.l iconwindow(PC),a0
- move.l 4(a0),icnwindow ;LeftEdge+TopEdge
- tst.l iconwindow
- beq.s 1$
- CALL CloseWindow,intuibase(a4)
- 1$ rts
-
- reverseimage
- move #((imageend-imagedata)/4)-1,d0
- lea imagedata(PC),a3
- 2$ eor.l #-1,(a3)+
- dbf d0,2$
- rts
-
- osecs dc.l 0
- omics dc.l 0
- nsecs dc.l 0
- nmics dc.l 0
-
- iconwindow dc.l 0
- icnwindow dc.w 40,170,72,28
- dc.b 0,1
- dc.l $20,$800
- dc.l gadget,0,0,0,0
- dc.w 72,28,72,28
- dc.w 1
-
- gadget dc.l 0
- dc.w 0,0,72,28,4,2,$20
- dc.l image
- dc.l 0,0,0,0
- dc.w 0
- dc.l 0
-
- image dc.w 0,0,72,28,2
- dc.l imagedata
- dc.b 3,0
- dc.l 0
-
- imagedata dc.w $000F,$FFFF,$FFFF,$FFF8,$0000,$001F,$FFFF,$FFFF
- dc.w $FFFC,$0000,$001F,$0000,$0000,$007C,$0000,$001F
- dc.w $7FFF,$FFFF,$FF7C,$0000,$001F,$4A46,$0244,$557C
- dc.w $0000,$001F,$5108,$D411,$817C,$0000,$001F,$7FFF
- dc.w $FFFF,$FF7C,$0000,$001F,$0000,$0000,$007C,$0000
- dc.w $001F,$30C0,$0000,$007C,$0000,$001F,$1980,$0000
- dc.w $007C,$0000,$001F,$0F0F,$1F0F,$1F7C,$0000,$001F
- dc.w $0619,$9999,$997C,$0000,$001F,$0F19,$999F,$987C
- dc.w $0000,$001F,$1999,$9F18,$187C,$0000,$001F,$30CF
- dc.w $180F,$187C,$0000,$001F,$0000,$1800,$007C,$0000
- dc.w $001F,$0000,$0000,$007C,$0000,$001F,$FFFF,$FFFF
- dc.w $FFFC,$0000,$000F,$FFFF,$FFFF,$FF18,$0000,$0000
- dc.w $0000,$0000,$0000,$0000,$3FFF,$FFFF,$FFFF,$FFFF
- dc.w $FC00,$FDFF,$FFFF,$FFFF,$FFFF,$FF00,$EBFF,$FFFF
- dc.w $FFFF,$FFFF,$FF00,$F7FF,$FFFF,$FFFF,$F800,$0700
- dc.w $FFFF,$FFFF,$FFFF,$FFFF,$FF00,$FFFF,$FFFF,$FFFF
- dc.w $FFFF,$FF00,$FFFF,$FFFF,$FFFF,$FFFF,$FF00,$3FFF
- dc.w $FFFF,$FFFF,$FFFF,$FC00,$0000,$0000,$0000,$0000
- dc.w $0000,$0000,$0000,$0000,$0000,$0000,$0000,$FFFF
- dc.w $FFFF,$FF80,$0000,$0000,$FFFF,$FFFF,$FF80,$0000
- dc.w $0000,$FFFF,$FFFF,$FF80,$0000,$0000,$FFFF,$FFFF
- dc.w $FF80,$0000,$0000,$FFFF,$FFFF,$FF80,$0000,$0000
- dc.w $FFFF,$FFFF,$FF80,$0000,$0000,$8000,$0000,$0080
- dc.w $0000,$0000,$8000,$0000,$0080,$0000,$0000,$8000
- dc.w $0000,$0080,$0000,$0000,$8000,$0000,$0080,$0000
- dc.w $0000,$8000,$0000,$0080,$0000,$0000,$8000,$0000
- dc.w $0080,$0000,$0000,$8000,$0000,$0080,$0000,$0000
- dc.w $8000,$0000,$0080,$0000,$0000,$FFFF,$FFFF,$FF80
- dc.w $0000,$0000,$0000,$0000,$00E0,$0000,$0000,$0000
- dc.w $0000,$00E0,$0000,$0000,$1FFF,$FFFF,$F800,$0000
- dc.w $0000,$0080,$0040,$0000,$0000,$0200,$0080,$0040
- dc.w $0000,$0000,$1400,$0080,$0040,$003F,$0000,$0800
- dc.w $0080,$0040,$07FF,$F800,$0000,$0080,$0040,$003F
- dc.w $0000,$0000,$0080,$0040,$0000,$3800,$FFFF,$FFFF
- dc.w $FFFF,$FFFF,$FE00,$0000,$0080,$0040,$0000,$0000
- imageend
- iconifgad dc.l 0
- dc.w -83,0
- dc.w 31,10
- dc.w $14
- dc.w $41
- dc.w 1
- dc.l iconifimg
- dc.l 0
- dc.l 0
- dc.l 0
- dc.l 0
- dc.w 0
- dc.l 0
-
- iconifimg dc.w 0,0
- dc.w 31,10
- dc.w 2
- dc.l iconifdata
- dc.b $0003,$0000
- dc.l 0
-
- iconifdata dc.w $7FFF,$FFFC,$601F,$FFFC,$6000,$000C,$607F,$FFCC
- dc.w $6060,$00CC,$6067,$FCCC,$7E60,$00CC,$7E7F,$FFCC
- dc.w $7E00,$000C,$7FFF,$FFFC,$0000,$0000,$1FE0,$0000
- dc.w $1FFF,$FFF0,$1F80,$0030,$1F9F,$FF30,$1F98,$0330
- dc.w $019F,$FF30,$0180,$0030,$01FF,$FFF0,$0000,$0000
-
- CODE SCROLLBAR
- setprop btst.w #8,propinfo ;update slider position and
- bne.s 8$ ;and size
- moveq #0,d0
- CALL LockIBase,intuibase(a4)
- move.l d0,d5
- move.l wnptr(a4),d0 ;see if the user hit the
- beq.s 7$ ;scrollbar in the meantime
- move.l d0,a0
- move.l 86(a0),a0 ;wn->UserPort
- lea 20(a0),a0 ;Userport->MsgList
- 5$ move.l 0(a0),d0
- beq.s 6$ ;no more pending messages
- move.l d0,a0
- cmp.l #$20,20(a0) ;gadgetdown ?
- bne.s 5$
- move.l 28(a0),a1
- cmp.w #3,38(a1) ;scrollbar ?
- beq.s 7$
- bra.s 5$
-
- 7$ move.l d5,a0
- CALL UnlockIBase,intuibase(a4)
- 8$ rts
-
- 6$ move.l d5,a0
- CALL UnlockIBase,intuibase(a4)
- moveq #0,d2 ;VertPot = firstline*MAXPOT/(numlines-rows)
- move.l numlines(a4),d3
- sub.w rows(a4),d3
- ble.s 1$
- move.l firstline(a4),d2
- mulu #65535,d2
- divu d3,d2
-
- 1$ moveq #-1,d4 ;VertBody = rows*MAXBODY/numlines
- move.w rows(a4),d5
- ext.l d5
- cmp.l numlines(a4),d5
- bge.s 2$
- mulu #$ffff,d5
- move.l numlines(a4),d0
- divu d0,d5
- move.l d5,d4
-
- 2$ cmp.w propinfo+8(PC),d4 ;did something change ?
- bne.s 3$
- cmp.w propinfo+4(PC),d2
- beq.s 4$
-
- 3$ lea sbgadget(PC),a0
- move.l wnptr(a4),d0
- beq.s 4$
- move.l d0,a1
- suba.l a2,a2
- moveq #-1,d3
- moveq #0,d1
- moveq #1|4,d0
- moveq #1,d5
- CALL NewModifyProp,intuibase(a4)
- 4$ rts
-
- proppos move.w propinfo+4(PC),d0 ;get slider position and update
- move.l numlines(a4),d1 ;our window if necessary
- sub.w rows(a4),d1
- ble.s 1$
- move.l #$ffff,d3 ;firstline=VertPot/(MAXPOT/numlines-rows)
- divu d1,d3
- divu d3,d0
- ext.l d0
- cmp.l firstline(a4),d0
- beq.s 1$
- move.l d0,firstline(a4)
- jsr blastout
- 1$ rts
-
- sbgadget dc.l 0
- dc.w -14,9
- dc.w 14,-20
- dc.w $10|$40
- dc.w 1|2|8|$10
- dc.w 3
- dc.l sbdata,0,0,0,propinfo
- dc.w 3
- dc.l 0
-
- propinfo dc.w 1|4
- dc.w 0,0
- dc.w -1,-1
- dc.w 0,0,0,0,0,0
-
- sbdata ds.l 4
- END
-