1000 REMark Jobs1_BAS
1010 :
1020 REMark Display a menu of all jobs running in the QL
1030 :
1035 REMark $$asmb=win2_jobs_cde,4,82
1037 REMark $$asmb=wzz1_dev_djtk_djtoolkit_bin,0,12
1038 REMark $$asmb=wzz1_qlib_qlib_ext,0,12
1039 :
1040 initialise
1050 REPeat loop
1060   action = MCALL(#menu; \0)
1070   SELect ON action
1080     = 0: EXIT loop: REMark ESC
1090     = -4: initialise_menu: REMark WAKE
1100   END SELect 
1110   SELect ON action
1120     = -4: action = MSTAT%(#menu, action TO available%)
1130   END SELect 
1140 END REPeat loop
1145 MCLEAR #menu
1150 CLOSE #3
1160 :
1165 :
1170 DEFine PROCedure initialise
1180   available% = 0
1190   selected% = 1
1200   unavailable%= -1
1210   :
1220   OPEN #3,'con_'
1230   MDRAW #3,'jobs', 50, 25
1240   menu = MWDEF(#3)
1250   initialise_menu
1260 END DEFine initialise
1270 :
1280 :
1290 DEFine PROCedure initialise_menu
1300   LOCal x, sv_jbbas, sv_jbmax, sv_jbtop
1310   LOCal job_base
1320   :
1330   REMark Create an array to hold job names, find all jobs
1340   REMark and fill in the array. Remove any menu from the
1350   REMark main screen and set up a new menu using our array.
1360   :
1370   sv_jbmax = PEEK_W(SYSTEM_VARIABLES + 98)
1380   sv_jbbas = PEEK_L(SYSTEM_VARIABLES + 104)
1390   sv_jbtop = PEEK_L(SYSTEM_VARIABLES + 108)
1400   :
1410   REMark There is always at least one job running so
1420   REMark I don't need to check for zero jobs here.
1430   :
1440   DIM job_name$(sv_jbmax, 30)
1450   :
1460   REMark Now scan the job table and find the base
1470   REMark address of each job, if active. From there
1480   REMark we can find and extract the job name for our
1490   REMark menu. Job 0 is always SuperBasic.
1500   :
1510   job_name$(0) = 'SuperBasic'
1520   FOR x = 1 TO sv_jbmax
1530     job_base = PEEK_L(sv_jbbas + (x * 4))
1540     IF PEEK(sv_jbbas + (x * 4)) = 255
1550        job_name$(x) = 'Dead Job'
1560     ELSE 
1570        size = PEEK_W(job_base + 104 + 8)
1580        IF (size > 30) OR (size < 0)
1590           job_name$(x) = 'Unknown name'
1600        ELSE 
1610           job_name$(x) = PEEK_STRING(job_base + 104 + 10, size)
1620        END IF 
1630     END IF 
1640   END FOR x
1650   MAWCLEAR #menu, 1
1660   MAWDRAW #menu, 1, job_name$
1670 END DEFine initialise_menu
30000 :
30010 :
32000 REMark $$off
32010 DEFine PROCedure sa
32020   QSAVE 'win2_Jobs1'
32030   QSAVE 'ram1_Jobs1'
32040   SAVE 'win2_Jobs1_bas'
32050 END DEFine 
32060 REMark $$on
