PL/M-86 COMPILER PIN RSP - reads characters from keyboard 04/22/83 17:10:47 PAGE 1 VAX/VMS PL/M-86 V1.0 COMPILATION OF MODULE PIN OBJECT MODULE PLACED IN PIN.OBJ COMPILER INVOKED BY: PLM86 PIN.PLM OPTIMIZE(3) DEBUG XREF $title ('PIN RSP - reads characters from keyboard') $set (debug=0) $compact 1 pin: do; /* PIN performs physical input from for each physical console and places the characters into the input queue associated with each virtual console. Switch screen commands are received from the XIOS and acted on by PIN. Control S/Q, Control O and Control C are intercepted and processed by PIN. The input queues are created by VOUT. */ $include (:f1:comlit.lit) 2 1 = declare = lit literally 'literally', = dcl lit 'declare', = true lit '0ffh', = false lit '0', = no lit 'not', = boolean lit 'byte', = forever lit 'while true', = cr lit '13', = lf lit '10', = tab lit '9'; 3 1 dcl rsp$link word external; /* segment of SYSDAT */ $include (:f1:mfunc.lit) = /* Concurrent CP/M function numbers */ 4 1 = dcl m$prtbuf lit '9', = m$select lit '14', = m$openf lit '15', = m$closef lit '16', = m$deletef lit '19', = m$readf lit '20', = m$writef lit '21', = m$makef lit '22', = m$getlogin lit '24', = m$curdsk lit '25', = m$setdma lit '26', = m$setatt lit '30', = m$setusr lit '32', = m$readrf lit '33', = m$writerf lit '34', PL/M-86 COMPILER PIN RSP - reads characters from keyboard 04/22/83 17:10:47 PAGE 2 = m$resetdrv lit '37', = m$errmode lit '45', = m$dirbios lit '50', = m$makeq lit '134', = m$openq lit '135', = m$deleteq lit '136', = m$readq lit '137', = m$creadq lit '138', = m$writeq lit '139', = m$cwriteq lit '140', = m$delay lit '141', = m$dispatch lit '142', = m$setprior lit '145', = m$detach lit '147', = m$setcns lit '148', = m$parse lit '152', = m$getcns lit '153', = m$sysdat lit '154', = m$getpd lit '156', = m$abort lit '157'; = /* Internal calls */ 5 1 = dcl mi$sleep lit '0212H', = mi$wakeup lit '0213H'; = $include (:f1:mxfunc.lit) = /* MP/M-86 XIOS function numbers */ 6 1 = dcl mx$conin lit '1', = mx$conout lit '2', = mx$lstout lit '4', = mx$switch lit '7', = mx$upstatus lit '8'; $include (:f1:sdpin.lit) = /* System Data Page */ 7 1 = dcl sysdat$pointer pointer; 8 1 = dcl sysdat$ptr structure( = offset word, = segment word) at (@sysdat$pointer); 9 1 = declare sd based sysdat$pointer structure ( = supmod (4) word, = /* rtmmod (4) word, = memmod (4) word, = ciomod (4) word, = bdosmod (4) word, = xiosmod (4) word, = netmod (4) word, = reservd (4) word */ = space1(28) word, = mpmseg word, = rspseg word, = endseg word, PL/M-86 COMPILER PIN RSP - reads characters from keyboard 04/22/83 17:10:47 PAGE 3 = module$map byte, = ncns byte, = nlst byte, = nccb byte, = nflags byte, = srchdisk byte, = mmp word, = nslaves byte, = dayfile byte, = tempdisk byte, = tickspersec byte, = lul word, = ccb word, = flags word, = mdul word, = mfl word, = pul word, = qul word, = qmau (4) word, = rlr word, = dlr word, = drl word, = plr word, = slr word, = thrdrt word, = qlr word, = mal word, = version word, = vernum word, = mpmvernum word, = tod_day word, = tod (3) byte, = ncondev byte, = nlstdev byte, = nciodev byte, = lcb word, = openvec word, = lockmax byte, = openmax byte, = space2 (2) word, = cmod byte ); = = 10 1 = declare sd$byte based sysdat$pointer (1) byte; 11 1 = dcl ncondev lit '83h', = nlstdev lit '84h', = nciodev lit '85h'; $include (:f1:proces.lit) = /* = Proces Literals MP/M-8086 II = */ 12 1 = declare pnamsiz literally '8'; 13 1 = declare pd$hdr literally 'structure PL/M-86 COMPILER PIN RSP - reads characters from keyboard 04/22/83 17:10:47 PAGE 4 = (link word,thread word,stat byte,prior byte,flag word, = name (8) byte,uda word,dsk byte,user byte,ldsk byte,luser byte, = mem word'; 14 1 = declare pd$structure literally 'pd$hdr, = dvract word,wait word,org byte,net byte,parent word, = cns byte,abort byte,conmode word,lst byte,sf3 byte,sf4 byte,sf5 byte, = reservd (4) byte,pret word,scratch word)'; 15 1 = declare psrun lit '00', = pspoll lit '01', = psdelay lit '02', = psswap lit '03', = psterm lit '04', = pssleep lit '05', = psdq lit '06', = psnq lit '07', = psflagwait lit '08', = psciowait lit '09'; 16 1 = declare pf$sys lit '00001h', = pf$keep lit '00002h', = pf$kernal lit '00004h', = pf$pure lit '00008h', = pf$table lit '00010h', = pf$resource lit '00020h', = pf$raw lit '00040h', = pf$ctlc lit '00080h', = pf$active lit '00100h', = pf$tempkeep lit '00200h', = pf$ctld lit '00400h', = pf$childabort lit '00800h', = pf$noctls lit '01000h'; 17 1 = declare pcm$11 lit '00001h', = pcm$ctls lit '00002h', = pcm$rout lit '00004h', = pcm$ctlc lit '00008h', = pcm$ctlo lit '00080h', = pcm$rsx lit '00300h'; 18 1 declare pd$pointer pointer; 19 1 declare pd$ptr structure (offset word, segment word) at (@pd$pointer); 20 1 declare pd based pd$pointer pd$structure; 21 1 declare ncopies byte external, /* copy number of this process, corresponds */ cnsnum byte at(@ncopies);/* with physical console number */ 22 1 declare ctrlC lit '3'; /* some ASCII codes */ 23 1 declare ctrlD lit '4'; 24 1 declare bell lit '7'; 25 1 declare ctrlO lit '15'; 26 1 declare ctrlP lit '16'; 27 1 declare ctrlQ lit '17'; 28 1 declare ctrlS lit '19'; 29 1 declare esc lit '27'; PL/M-86 COMPILER PIN RSP - reads characters from keyboard 04/22/83 17:10:47 PAGE 5 /* - global variables - */ $include (:f1:vccb.lit) = /* Concurrent CP/M Character Control Block Structure */ = /* +---------+---------+---------+---------+ = 00 | attach | queue | = +---------+---------+---------+---------+ = 04 | flag | startcol| column | nchar | = +---------+---------+---------+---------+ = 08 | mimic | msource | pc | vc | = +---------+---------+---------+---------+ = 0C | btmp | resrvd | state | = +---------+---------+---------+---------+ = 10 | maxbufsiz | vinq | = +---------+---------+---------+---------+ = 14 | voutq | vcmxq | = +---------+---------+---------+---------+ = 18 | qpbflgs | qpbfill | qpbqaddr | = +---------+---------+---------+---------+ = 1C | qpbnmsgs | qpbbuffptr | = +---------+---------+---------+---------+ = 20 | qbuff | cosleep | = +---------+---------+---------+---------+ = 24 | usleep | vsleep | = +---------+---------+---------+---------+ = 28 | ... reserved ... | = +---------+---------+---------+---------+ = */ 30 1 = dcl ccb$structure lit 'structure (attach address, queue address, = flag byte, startcol byte, column byte, nchar byte, mimic byte, msource byte, = ccb$tail1'; 31 1 = dcl ccb$tail1 lit = 'pc byte, vc byte, btmp byte, reservd byte, state word, maxbufsiz word, = ccb$tail2'; 32 1 = dcl ccb$tail2 lit = 'vinq address, voutq address, vcmxq address, = qpbflags byte, qpbresrvd byte, qpbqaddr address, = qpbnmsgs address, qpbbuffptr address, qbuff address, cosleep word, = usleep word, vsleep word, r1 word, r2 word)'; 33 1 = declare /* flag values */ = cf$listcp lit '001h', /* control P toggle */ = cf$compc lit '002h', /* suppress output */ = cf$switchs lit '004h', /* XIOS supports switch screening */ = cf$conout lit '008h', /* XIOS console output ownership */ = cf$vout lit '010h', /* process writing to VOUTQ */ = cf$bufp lit '020h'; /* toggle to control printer echo */ = /* on control P when background */ = /* and buffered */ = /* values of state byte */ PL/M-86 COMPILER PIN RSP - reads characters from keyboard 04/22/83 17:10:47 PAGE 6 = /* conout goes to XIOS */ = /* state word flags */ 34 1 = dcl = csm$buffered lit '0001h', = csm$background lit '0002h', = csm$purging lit '0004h', = csm$noswitch lit '0008h', = csm$suspend lit '0010h', = csm$abort lit '0020h', = csm$filefull lit '0040h', = csm$ctrlS lit '0080h', = csm$ctrlO lit '0100h', = csm$ctrlP lit '0200h'; 35 1 = dcl x$init$offset lit '0Ch', = x$init$pointer pointer, = x$init$ptr structure (offset word, segment word) at (@x$init$pointer), = x$init based x$init$pointer structure = (tick byte, ticks$sec byte, door byte, resrvd1 (2) byte, = nvcns byte, nccb byte, nlst byte, ccb word, lcb word); 36 1 = dcl lcb$structure lit 'structure (attach address, queue address, = flag byte, startcol byte, column byte, nchar byte, = mimic byte, msource byte)'; 37 1 declare ccb$pointer pointer; 38 1 declare ccb$ptr structure(offset word,segment word) at (@ccb$pointer); 39 1 declare ccb based ccb$pointer ccb$structure; 40 1 declare old$ccb$pointer pointer; 41 1 declare old$ccb based old$ccb$pointer ccb$structure; 42 1 declare lcb$pointer pointer; 43 1 declare lcb$ptr structure(offset word,segment word) at (@lcb$pointer); 44 1 declare lcb based lcb$pointer lcb$structure; 45 1 declare screen byte; /* current foreground screen number */ $include (:f1:qd.lit) = /* Queue Descriptor */ 46 1 = dcl qnamsiz lit '8'; 47 1 = dcl qd$structure lit 'structure( = link word, = net byte, = org byte, = flags word, = name(qnamsiz) byte, = msglen word, = nmsgs word, = dq word, = nq word, PL/M-86 COMPILER PIN RSP - reads characters from keyboard 04/22/83 17:10:47 PAGE 7 = msgcnt word, = msgout word, = buffer word)'; = /* queue flag values */ 48 1 = dcl qf$mx lit '001h'; /* Mutual Exclusion */ 49 1 = dcl qf$keep lit '002h'; /* NO DELETE */ 50 1 = dcl qf$hide lit '004h'; /* Not User writable */ 51 1 = dcl qf$rsp lit '008h'; /* rsp queue */ 52 1 = dcl qf$table lit '010h'; /* from qd table */ 53 1 = dcl qf$rpl lit '020h'; /* rpl queue */ 54 1 = dcl qf$dev lit '040h'; /* device queue */ = /* Queue Parameter Block */ 55 1 = dcl qpb$structure lit 'structure( = flgs byte, = net byte, = qaddr word, = nmsgs word, = buffptr word, = name (qnamsiz) byte )'; 56 1 declare qpb qpb$structure; 57 1 dcl null word data (0ffffh); /* sent to VOUTQ to wake up VOUT */ /* Note: this forces a 2 byte constant section and thus hex generation */ 58 1 dcl apb structure ( /* abort parameter block */ pd word, term word, cns byte, rsrvd byte) initial (0,0,0,0); 59 1 dcl cword word, /* format of console input from XIOS */ chars (2) byte at (@cword), char byte at (@chars(0)), char$type byte at(@chars(1)), ct$switch lit '0ffh', ct$data lit '0'; 60 1 mon1: procedure(func,a) external; 61 2 dcl func byte, a address; 62 2 end mon1; 63 1 mon2: procedure(func,a) byte external; 64 2 dcl func byte, a address; 65 2 end mon2; 66 1 mon3: procedure(func,a) address external; 67 2 dcl func byte, a address; 68 2 end mon3; 69 1 mon4: procedure(func,a) pointer external; 70 2 dcl func byte, a address; 71 2 end mon4; 72 1 intsys: procedure (cx, dx, bx) external; /* internal O.S. functions */ 73 2 dcl (cx, dx, bx) word; PL/M-86 COMPILER PIN RSP - reads characters from keyboard 04/22/83 17:10:47 PAGE 8 74 2 end intsys; /* the following 4 procedures call the XIOS directly, the PXIOS.A86 */ /* sets the registers to make this legal. DS = system data segment, */ /* ES = UDA. The parameters are passed AX=FUNC, CX=P1, DX=P2 */ 75 1 pxios1: procedure(func,p1,p2) external; 76 2 dcl (func,p1,p2) address; 77 2 end pxios1; /*pxios2: procedure(func,p1,p2) byte external; dcl (func,p1,p2) address; end pxios2;*/ 78 1 pxios3: procedure(func,p1,p2) word external; 79 2 dcl (func,p1,p2) address; 80 2 end pxios3; /*pxios4: procedure(func,p1,p2) pointer external; dcl (func,p1,p2) address; end pxios4;*/ 81 1 conin: procedure; 82 2 cword = pxios3(mx$conin, 0, 0); /* get console input from XIOS */ 83 2 end; /* AX=func, CX=0, DX(device#)=0 */ 84 1 print$msg: procedure(len, endchar, sptr); /* print string to delimiter */ 85 2 dcl (len, i, endchar) byte, sptr pointer, /* or len number of chars */ string based sptr (1) byte; 86 2 i = 0; 87 2 do while string(i) <> endchar and i < len; 88 3 call pxios1(mx$conout, string(i), screen); 89 3 i = i + 1; 90 3 end; 91 2 end print$msg; $if debug=1 error: procedure (msg$ptr); dcl msg$ptr pointer; call print$msg(0ffh, 0, @(cr, lf, '**** PIN ERROR ****', cr, lf, 0)); call print$msg(0ffh, '$', msg$ptr); halt; end error; $endif 92 1 read$change$mxq: procedure (qaddr); 93 2 dcl qaddr address; 94 2 qpb.qaddr = qaddr; 95 2 call mon1 (m$readq, .qpb); 96 2 end read$change$mxq; 97 1 write$change$mxq: procedure (qaddr); 98 2 dcl qaddr address; 99 2 qpb.qaddr = qaddr; 100 2 call mon1 (m$writeq, .qpb); 101 2 end write$change$mxq; PL/M-86 COMPILER PIN RSP - reads characters from keyboard 04/22/83 17:10:47 PAGE 9 102 1 sleep: procedure (list$root); 103 2 dcl list$root word; 104 2 call intsys(mi$sleep, list$root, ps$ciowait); 105 2 end sleep; 106 1 wake$up: procedure (list$root); 107 2 dcl list$root word; 108 2 call intsys(mi$wakeup, list$root, 0); 109 2 end wake$up; /* The conout flag is set and "owned" before any process calls the XIOS console output routine for a particular screen. PIN sets this flag to insure there is no process in the XIOS console output code. The ccb.cosleep is a temporary location for processes waiting to own the the XIOS conout bit. */ 110 1 set$conout$flag: procedure(ccb$ptr); 111 2 dcl ccb$ptr pointer; 112 2 dcl ccb based ccb$ptr ccb$structure; 113 2 disable; 114 2 do while (ccb.flag and cf$conout) <> 0; /* Another process is in XIOS */ 115 3 call sleep (.ccb.cosleep); /* PIN gets awakened 1st: */ 116 3 end; /* better priority */ 117 2 ccb.flag = ccb.flag or cf$conout; 118 2 enable; 119 2 end set$conout$flag; 120 1 reset$conout$flag: procedure (ccb$ptr); 121 2 dcl ccb$ptr pointer; 122 2 dcl ccb based ccb$ptr ccb$structure; 123 2 ccb.flag = ccb.flag and not cf$conout; /* wake sleeping process */ 124 2 call wakeup(.ccb.cosleep); 125 2 end reset$conout$flag; 126 1 wake$vout: procedure(ccb$ptr); 127 2 dcl ccb$ptr pointer; 128 2 dcl ccb based ccb$ptr ccb$structure; 129 2 if (ccb.state and csm$buffered) = 0 then 130 2 return; /* dynamic mode */ 131 2 qpb.qaddr = ccb.voutq; 132 2 qpb.buffptr = .null; /* VOUT message is 2 byte format */ 133 2 call mon1(m$cwriteq, .qpb); /* null message if first byte = 0ffh */ 134 2 qpb.qaddr = ccb.voutq; 135 2 qpb.buffptr = .null; /* VOUT needs two wake-ups in some */ 136 2 call mon1(m$cwriteq, .qpb); /* situations */ 137 2 call wake$up(.ccb.vsleep); 138 2 end wake$vout; 139 1 write$vinq: procedure(c); 140 2 dcl c byte; 141 2 qpb.qaddr = ccb.vinq; 142 2 qpb.buffptr = .c; 143 2 if mon3(m$cwriteq, .qpb) = 0ffffh then /* ring console bell if type */ 144 2 do; 145 3 call set$conout$flag(@ccb); /* XIOS is not reentrant on same console */ 146 3 call pxios1(mx$conout, bell, screen); /* ahead buffer if full */ PL/M-86 COMPILER PIN RSP - reads characters from keyboard 04/22/83 17:10:47 PAGE 10 147 3 call reset$conout$flag(@ccb); 148 3 end; 149 2 end write$vinq; 150 1 set$ccb: procedure (vc); /* base VCCB structure */ 151 2 dcl vc byte; 152 2 old$ccb$pointer = ccb$pointer; 153 2 ccb$ptr.offset = sd.ccb + size(ccb) * vc; 154 2 end set$ccb; /* the functions below act on special keys received from the keyboard */ 155 1 dcl controlS$has$been$pressed boolean initial (false); 156 1 switch: procedure; /* switch virtual consoles */ 157 2 if char >= sd.ncns then 158 2 return; /* check for legal range */ 159 2 if (ccb.state and csm$noswitch) <> 0 then /* no switch state */ 160 2 return; 161 2 if char = ccb.vc then /* request is for currently selected screen */ 162 2 return; 163 2 call set$ccb(screen := char); /* switch old$ccb and ccb structures */ /* - Switch Out Action - */ 164 2 call read$change$mxq(oldccb.vcmxq); /* read the MX 1st THEN */ 165 2 call set$conout$flag(@oldccb); /* the conout flag */ 166 2 oldccb.state = oldccb.state or csm$background; 167 2 if (oldccb.state and csm$purging) <> 0 then 168 2 oldccb.state = oldccb.state and not double(csm$purging); /* turn off purge */ /* Ensure the two affected screens are not currently being updated */ /* by the XIOS console output routines. */ 169 2 call read$change$mxq(ccb.vcmxq); 170 2 call set$conout$flag$(@ccb); 171 2 call pxios1(mx$switch, 0, screen); 172 2 call reset$conout$flag(oldccb$pointer); 173 2 call write$change$mxq(oldccb.vcmxq); /* allow VOUT to change state */ 174 2 if (oldccb.state and csm$buffered) <> 0 then /* background buffered */ 175 2 call wake$vout(@oldccb); /* send chars to VOUT if buffer, */ /* else user process hangs on USLEEP */ /* - Switch In Action - */ 176 2 ccb.state = ccb.state and not double(csm$background); 177 2 if (ccb.state and csm$buffered) <> 0 then 178 2 do; /* buffer or buffer error states */ /* turn on purge */ 179 3 ccb.state = (ccb.state or csm$purging) and not double(csm$filefull); /* turn off error could print msg */ PL/M-86 COMPILER PIN RSP - reads characters from keyboard 04/22/83 17:10:47 PAGE 11 180 3 call wake$vout(@ccb); /* here eventually */ 181 3 end; 182 2 call reset$conout$flag(ccb$pointer); 183 2 call write$change$mxq(ccb.vcmxq); 184 2 if (ccb.state and csm$ctrlS) <> 0 then /* we "own" the XIOS console */ 185 2 controlS$has$been$pressed = true; /* output flag */ else 186 2 controlS$has$been$pressed = false; 187 2 call pxios1(mx$upstatus, 0, 0); 188 2 end switch; 189 1 dcl drive$letters (17) byte initial ('ABCDEFGHIJKLMNOP '); 190 1 controlC: procedure; 191 2 dcl (junk,cur$drive,logged$in$drives) word; 192 2 dcl letter$index byte; 193 2 if (pd.conmode and pcm$ctlc) <> 0 then 194 2 do; 195 3 call write$vinq(char); 196 3 return; 197 3 end; 198 2 call read$change$mxq(ccb.vcmxq); /* keep CCB state from changing */ /* while we test and change it */ 199 2 ccb.state = ccb.state and not double(csm$ctrlS or csm$ctrlO); 200 2 controlS$has$been$pressed = false; /* control C turns off control S and */ /* control O, doesn't change control P */ 201 2 if (ccb.state and csm$purging) <> 0 then /* stop purge */ 202 2 ccb.state = ccb.state and not double (csm$purging) or csm$abort; 203 2 qpb.qaddr = ccb.vinq; /* drain input queue, we have better */ 204 2 qpb.buffptr = .junk; /* priority than user process or TMP */ 205 2 do while mon2(m$creadq, .qpb) <> 0ffh; /* drain type-ahead q */ 206 3 end; 207 2 ccb.nchar = 0; /* zero console status look ahead */ 208 2 call write$change$mxq(ccb.vcmxq); 209 2 call wake$vout(@ccb); /* let VOUT clean up if buffering */ 210 2 call wake$up(.ccb.usleep); /* user process could have gone to sleep */ /* during this rigamarole */ 211 2 apb.pd = ccb.attach; /* CIO keeps aborts from happening */ 212 2 call mon1(m$abort, .apb); /* while in the XIOS, do abort after */ /* VOUT has cleaned up, otherwise the TMP*/ /* with a better priority can print its */ /* prompt, and then VOUT prints one last */ /* purge character */ /* reset drives and print which fail */ 213 2 logged$in$drives = mon3(m$getlogin,0); 214 2 cur$drive = 1; /* drive to reset */ 215 2 letter$index = 0; 216 2 do junk = 0 to 15; 217 3 if (logged$in$drives and cur$drive) <> 0 then 218 3 if mon2(m$resetdrv, cur$drive) <> 0 then 219 3 do; 220 4 drive$letters(letter$index) = 'A' + junk; 221 4 letter$index = letter$index + 1; 222 4 end; PL/M-86 COMPILER PIN RSP - reads characters from keyboard 04/22/83 17:10:47 PAGE 12 223 3 cur$drive = shl(cur$drive,1); 224 3 end; 225 2 if letter$index > 0 then 226 2 do; 227 3 call set$conout$flag(@ccb); 228 3 call print$msg(0ffh,0,@(cr,lf,'Open file on drive(s) ',0)); 229 3 call print$msg(1,0,@drive$letters(0)); 230 3 do junk = 1 to letter$index - 1; 231 4 call print$msg(1,0,@(',')); 232 4 call print$msg(1,0,@drive$letters(junk)); 233 4 end; 234 3 call print$msg(2,0,@(cr,lf)); 235 3 ccb.startcol, ccb.column = 0; /* for function 10 - line redraw */ 236 3 call reset$conout$flag(@ccb); 237 3 end; 238 2 end controlC; 239 1 controlO: procedure; /* toggle console output byte bucket */ 240 2 if (pd.conmode and pcm$ctlo) <> 0 then /* ignore if control P or if func */ 241 2 do; 242 3 call write$vinq(char); 243 3 return; 244 3 end; 245 2 call read$change$mxq(ccb.vcmxq); 246 2 ccb.state = ccb.state xor csm$ctrlO; 247 2 call write$change$mxq(ccb.vcmxq); 248 2 call wake$vout(@ccb); 249 2 call pxios1(mx$upstatus, 0, 0); 250 2 end controlO; 251 1 turn$off$ctrlO: procedure; 252 2 call read$change$mxq(ccb.vcmxq); 253 2 ccb.state = ccb.state and not double(csm$ctrlO); 254 2 call write$change$mxq(ccb.vcmxq); 255 2 call wake$vout(@ccb); 256 2 call pxios1(mx$upstatus, 0, 0); 257 2 end turn$off$ctrlO; 258 1 controlS: procedure; 259 2 if (pd.flag and pf$noctls) <> 0 then /* special condition for CLI day */ 260 2 return; /* file logging */ 261 2 if (pd.conmode and pcm$ctlS) <> 0 then 262 2 do; 263 3 call write$vinq(char); 264 3 return; 265 3 end; 266 2 call read$change$mxq(ccb.vcmxq); 267 2 ccb.state = ccb.state and not double(csm$ctrlO) or csm$ctrlS; /* control S turns off control O */ 268 2 call pxios1(mx$upstatus, 0, 0); 269 2 call write$change$mxq(ccb.vcmxq); 270 2 controlS$has$been$pressed = true; 271 2 end controlS; 272 1 controlQ: procedure; 273 2 call read$change$mxq(ccb.vcmxq); 274 2 ccb.state = ccb.state and not double(csm$ctrlS); PL/M-86 COMPILER PIN RSP - reads characters from keyboard 04/22/83 17:10:47 PAGE 13 275 2 call write$change$mxq(ccb.vcmxq); 276 2 call wake$vout(@ccb); 277 2 call wakeup(.ccb.usleep); 278 2 call pxios1(mx$upstatus, 0, 0); 279 2 controlS$has$been$pressed = false; 280 2 end controlQ; 281 1 controlP: procedure; 282 2 if (pd.conmode and pcm$rout) <> 0 then /* control P is ignored if console */ 283 2 do; 284 3 call write$vinq(char); 285 3 return; /* mode is raw output */ 286 3 end; 287 2 call turn$off$ctrlO; 288 2 call read$change$mxq(ccb.vcmxq); 289 2 if (ccb.state and csm$ctrlP) = 0 then /* turn control P on */ 290 2 do; 291 3 lcb$ptr.offset = sd.lcb + pd.lst * size(lcb); 292 3 disable; 293 3 if lcb.attach = 0 then 294 3 do; 295 4 lcb.attach = 0ffffh; 296 4 lcb.msource = screen; 297 4 ccb.mimic = pd.lst; 298 4 ccb.state = ccb.state or csm$ctrlP; 299 4 enable; 300 4 end; else 301 3 do; 302 4 enable; 303 4 call set$conout$flag(@ccb); 304 4 call print$msg(0ffh,0,@(cr,lf,'Printer Busy',cr,lf,0)); 305 4 ccb.column,ccb.startcol = 0; /* for function 10 */ 306 4 call reset$conout$flag(@ccb); 307 4 end; 308 3 end; else /* turn off control P */ 309 2 do; 310 3 disable; 311 3 lcb$ptr.offset = sd.lcb + ccb.mimic * size(lcb); 312 3 lcb.attach = 0; 313 3 lcb.msource,ccb.mimic = 0ffh; 314 3 ccb.state = ccb.state and not double(csm$ctrlP); 315 3 ccb.flag = ccb.flag and not cf$bufp; 316 3 call wakeup(.lcb.queue); 317 3 enable; 318 3 end; 319 2 call write$change$mxq(ccb.vcmxq); 320 2 call pxios1(mx$upstatus, 0, 0); 321 2 end controlP; 322 1 raw: procedure boolean; 323 2 if (pd$ptr.offset := ccb.attach) = 0 then /* 0 during initialization */ 324 2 return(true); 325 2 if (pd.flag and pf$raw) = 0 then /* set by function 6 only */ 326 2 return(false); 327 2 call controlQ; /* avoid deadlock if user is mixing func 6 */ PL/M-86 COMPILER PIN RSP - reads characters from keyboard 04/22/83 17:10:47 PAGE 14 328 2 return(true); /* other console I/O calls */ 329 2 end raw; 330 1 plmstart: procedure public; 331 2 sysdat$ptr.segment, lcb$ptr.segment, ccb$ptr.segment = rsp$link; /* init pointers */ 332 2 ccb$ptr.offset = sd.ccb; /* CCB 0 is first in the table */ 333 2 pd$pointer = mon4(m$getpd, 0); 334 2 screen = 0; /* initial foreground console is 0 */ 335 2 do forever; 336 3 call conin; 337 3 if char$type = ct$switch then 338 3 call switch; 339 3 else if char$type = ct$data then 340 3 do; 341 4 if raw then 342 4 call write$vinq(char); else 343 4 do; 344 5 if controlS$has$been$pressed then 345 5 do; 346 6 if char = ctrlC then 347 6 call controlC; 348 6 else if char = ctrlQ then 349 6 call controlQ; 350 6 else if char = ctrlP then 351 6 call controlP; else 352 6 do; 353 7 call set$conout$flag(ccb$pointer); /* guard against unlikely */ 354 7 call pxios1(mx$conout,bell,screen); /* race condition */ 355 7 call reset$conout$flag(ccb$pointer); 356 7 end; 357 6 end; else 358 5 do; /* controlS has not been pressed */ 359 6 if char = ctrlC then 360 6 call controlC; 361 6 else if char = ctrlS then 362 6 call controlS; 363 6 else if char = ctrlO then 364 6 call controlO; 365 6 else if char = ctrlP then 366 6 call controlP; else 367 6 do; 368 7 if (ccb.state and csm$ctrlO) <> 0 then 369 7 call turn$off$ctrlO; 370 7 call write$vinq(char); 371 7 end; 372 6 end; 373 5 end;/* else (if not raw) */ 374 4 end; /* if char$type <> ct$data and char$type <> ct$switch then */ /* XIOS console input is ignored */ end; /* do forever */ PL/M-86 COMPILER PIN RSP - reads characters from keyboard 04/22/83 17:10:47 PAGE 15 376 2 end plmstart; 377 1 end pin; PL/M-86 COMPILER PIN RSP - reads characters from keyboard 04/22/83 17:10:47 PAGE 16 CROSS-REFERENCE LISTING ----------------------- DEFN ADDR SIZE NAME, ATTRIBUTES, AND REFERENCES ----- ------ ----- -------------------------------- 63 0000H 2 A. . . . . . . . . . . WORD PARAMETER 64 60 0000H 2 A. . . . . . . . . . . WORD PARAMETER 61 69 0000H 2 A. . . . . . . . . . . WORD PARAMETER 70 66 0000H 2 A. . . . . . . . . . . WORD PARAMETER 67 20 0021H 1 ABORT. . . . . . . . . BYTE MEMBER(PD) 58 0028H 6 APB. . . . . . . . . . STRUCTURE INITIAL 211 212 112 0000H 2 ATTACH . . . . . . . . WORD MEMBER(CCB) 122 0000H 2 ATTACH . . . . . . . . WORD MEMBER(CCB) 128 0000H 2 ATTACH . . . . . . . . WORD MEMBER(CCB) 44 0000H 2 ATTACH . . . . . . . . WORD MEMBER(LCB) 293 295 312 39 0000H 2 ATTACH . . . . . . . . WORD MEMBER(CCB) 211 323 41 0000H 2 ATTACH . . . . . . . . WORD MEMBER(OLDCCB) 24 BELL . . . . . . . . . LITERALLY 146 354 2 BOOLEAN. . . . . . . . LITERALLY 155 322 122 000CH 1 BTMP . . . . . . . . . BYTE MEMBER(CCB) 39 000CH 1 BTMP . . . . . . . . . BYTE MEMBER(CCB) 112 000CH 1 BTMP . . . . . . . . . BYTE MEMBER(CCB) 128 000CH 1 BTMP . . . . . . . . . BYTE MEMBER(CCB) 41 000CH 1 BTMP . . . . . . . . . BYTE MEMBER(OLDCCB) 56 0006H 2 BUFFPTR. . . . . . . . WORD MEMBER(QPB) 132 135 142 204 72 0000H 2 BX . . . . . . . . . . WORD PARAMETER 73 139 0004H 1 C. . . . . . . . . . . BYTE PARAMETER AUTOMATIC 140 142 122 0000H 44 CCB. . . . . . . . . . STRUCTURE BASED(CCBPTR) 123 124 39 0000H 44 CCB. . . . . . . . . . STRUCTURE BASED(CCBPOINTER) 141 145 147 153 159 161 169 170 176 177 179 180 183 184 198 199 201 202 203 207 208 209 210 211 227 235 236 245 246 247 248 252 253 254 255 266 267 269 273 274 275 276 277 288 289 297 298 303 305 306 311 313 314 315 319 323 368 9 0054H 2 CCB. . . . . . . . . . WORD MEMBER(SD) 153 332 128 0000H 44 CCB. . . . . . . . . . STRUCTURE BASED(CCBPTR) 129 131 134 137 112 0000H 44 CCB. . . . . . . . . . STRUCTURE BASED(CCBPTR) 114 115 117 35 0008H 2 CCB. . . . . . . . . . WORD MEMBER(XINIT) 37 000CH 4 CCBPOINTER . . . . . . POINTER 38 39 141 145 147 152 159 161 169 170 176 177 179 180 182 183 184 198 199 201 202 203 207 208 209 210 211 227 235 236 245 246 247 248 252 253 254 255 266 267 269 273 274 275 276 277 288 289 297 298 303 305 306 311 313 314 315 319 323 353 355 368 126 0004H 4 CCBPTR . . . . . . . . POINTER PARAMETER AUTOMATIC 127 128 129 131 134 137 110 0004H 4 CCBPTR . . . . . . . . POINTER PARAMETER AUTOMATIC 111 112 114 115 117 38 000CH 4 CCBPTR . . . . . . . . STRUCTURE AT 153 331 332 120 0004H 4 CCBPTR . . . . . . . . POINTER PARAMETER AUTOMATIC 121 122 123 124 30 CCBSTRUCTURE . . . . . LITERALLY 39 41 112 122 128 31 CCBTAIL1 . . . . . . . LITERALLY 39 41 112 122 128 32 CCBTAIL2 . . . . . . . LITERALLY 39 41 112 122 128 33 CFBUFP . . . . . . . . LITERALLY 315 33 CFCOMPC. . . . . . . . LITERALLY 33 CFCONOUT . . . . . . . LITERALLY 114 117 123 33 CFLISTCP . . . . . . . LITERALLY 33 CFSWITCHS. . . . . . . LITERALLY PL/M-86 COMPILER PIN RSP - reads characters from keyboard 04/22/83 17:10:47 PAGE 17 33 CFVOUT . . . . . . . . LITERALLY 59 002EH 1 CHAR . . . . . . . . . BYTE AT 157 161 163 195 242 263 284 342 346 348 350 359 361 363 365 370 59 002EH 2 CHARS. . . . . . . . . BYTE ARRAY(2) AT 59 59 002FH 1 CHARTYPE . . . . . . . BYTE AT 337 339 9 0090H 1 CMOD . . . . . . . . . BYTE MEMBER(SD) 20 0020H 1 CNS. . . . . . . . . . BYTE MEMBER(PD) 58 0004H 1 CNS. . . . . . . . . . BYTE MEMBER(APB) 21 0000H 1 CNSNUM . . . . . . . . BYTE EXTERNAL(1) AT 39 0006H 1 COLUMN . . . . . . . . BYTE MEMBER(CCB) 235 305 112 0006H 1 COLUMN . . . . . . . . BYTE MEMBER(CCB) 122 0006H 1 COLUMN . . . . . . . . BYTE MEMBER(CCB) 44 0006H 1 COLUMN . . . . . . . . BYTE MEMBER(LCB) 41 0006H 1 COLUMN . . . . . . . . BYTE MEMBER(OLDCCB) 128 0006H 1 COLUMN . . . . . . . . BYTE MEMBER(CCB) 81 0000H 20 CONIN. . . . . . . . . PROCEDURE STACK=000AH 336 20 0022H 2 CONMODE. . . . . . . . WORD MEMBER(PD) 193 240 261 282 190 02E1H 407 CONTROLC . . . . . . . PROCEDURE STACK=001EH 347 360 239 0478H 79 CONTROLO . . . . . . . PROCEDURE STACK=001EH 364 281 05ACH 277 CONTROLP . . . . . . . PROCEDURE STACK=001EH 351 366 272 0566H 70 CONTROLQ . . . . . . . PROCEDURE STACK=0018H 327 349 258 04FDH 105 CONTROLS . . . . . . . PROCEDURE STACK=001EH 362 155 0038H 1 CONTROLSHASBEENPRESSED BYTE INITIAL 185 186 200 270 279 344 128 0022H 2 COSLEEP. . . . . . . . WORD MEMBER(CCB) 39 0022H 2 COSLEEP. . . . . . . . WORD MEMBER(CCB) 41 0022H 2 COSLEEP. . . . . . . . WORD MEMBER(OLDCCB) 112 0022H 2 COSLEEP. . . . . . . . WORD MEMBER(CCB) 115 122 0022H 2 COSLEEP. . . . . . . . WORD MEMBER(CCB) 124 2 CR . . . . . . . . . . LITERALLY 228 234 304 34 CSMABORT . . . . . . . LITERALLY 202 34 CSMBACKGROUND. . . . . LITERALLY 166 176 34 CSMBUFFERED. . . . . . LITERALLY 129 174 177 34 CSMCTRLO . . . . . . . LITERALLY 199 246 253 267 368 34 CSMCTRLP . . . . . . . LITERALLY 289 298 314 34 CSMCTRLS . . . . . . . LITERALLY 184 199 267 274 34 CSMFILEFULL. . . . . . LITERALLY 179 34 CSMNOSWITCH. . . . . . LITERALLY 159 34 CSMPURGING . . . . . . LITERALLY 167 168 179 201 202 34 CSMSUSPEND . . . . . . LITERALLY 59 CTDATA . . . . . . . . LITERALLY 339 22 CTRLC. . . . . . . . . LITERALLY 346 359 23 CTRLD. . . . . . . . . LITERALLY 25 CTRLO. . . . . . . . . LITERALLY 363 26 CTRLP. . . . . . . . . LITERALLY 350 365 27 CTRLQ. . . . . . . . . LITERALLY 348 28 CTRLS. . . . . . . . . LITERALLY 361 59 CTSWITCH . . . . . . . LITERALLY 337 191 0032H 2 CURDRIVE . . . . . . . WORD 214 217 218 223 59 002EH 2 CWORD. . . . . . . . . WORD 59 82 72 0000H 2 CX . . . . . . . . . . WORD PARAMETER 73 9 004FH 1 DAYFILE. . . . . . . . BYTE MEMBER(SD) 2 DCL. . . . . . . . . . LITERALLY 9 006AH 2 DLR. . . . . . . . . . WORD MEMBER(SD) 35 0002H 1 DOOR . . . . . . . . . BYTE MEMBER(XINIT) DOUBLE . . . . . . . . BUILTIN 168 176 179 199 202 253 267 274 314 189 0039H 17 DRIVELETTERS . . . . . BYTE ARRAY(17) INITIAL 220 229 232 9 006CH 2 DRL. . . . . . . . . . WORD MEMBER(SD) PL/M-86 COMPILER PIN RSP - reads characters from keyboard 04/22/83 17:10:47 PAGE 18 20 0012H 1 DSK. . . . . . . . . . BYTE MEMBER(PD) 20 0018H 2 DVRACT . . . . . . . . WORD MEMBER(PD) 72 0000H 2 DX . . . . . . . . . . WORD PARAMETER 73 84 0008H 1 ENDCHAR. . . . . . . . BYTE PARAMETER AUTOMATIC 85 87 9 0044H 2 ENDSEG . . . . . . . . WORD MEMBER(SD) 29 ESC. . . . . . . . . . LITERALLY 2 FALSE. . . . . . . . . LITERALLY 155 186 200 279 326 44 0004H 1 FLAG . . . . . . . . . BYTE MEMBER(LCB) 39 0004H 1 FLAG . . . . . . . . . BYTE MEMBER(CCB) 315 112 0004H 1 FLAG . . . . . . . . . BYTE MEMBER(CCB) 114 117 122 0004H 1 FLAG . . . . . . . . . BYTE MEMBER(CCB) 123 41 0004H 1 FLAG . . . . . . . . . BYTE MEMBER(OLDCCB) 20 0006H 2 FLAG . . . . . . . . . WORD MEMBER(PD) 259 325 128 0004H 1 FLAG . . . . . . . . . BYTE MEMBER(CCB) 9 0056H 2 FLAGS. . . . . . . . . WORD MEMBER(SD) 56 0000H 1 FLGS . . . . . . . . . BYTE MEMBER(QPB) 2 FOREVER. . . . . . . . LITERALLY 335 78 0000H 2 FUNC . . . . . . . . . WORD PARAMETER 79 66 0000H 1 FUNC . . . . . . . . . BYTE PARAMETER 67 63 0000H 1 FUNC . . . . . . . . . BYTE PARAMETER 64 60 0000H 1 FUNC . . . . . . . . . BYTE PARAMETER 61 75 0000H 2 FUNC . . . . . . . . . WORD PARAMETER 76 69 0000H 1 FUNC . . . . . . . . . BYTE PARAMETER 70 85 0037H 1 I. . . . . . . . . . . BYTE 86 87 88 89 72 0000H INTSYS . . . . . . . . PROCEDURE EXTERNAL(6) STACK=0000H 104 108 191 0030H 2 JUNK . . . . . . . . . WORD 204 216 220 230 232 44 0000H 10 LCB. . . . . . . . . . STRUCTURE BASED(LCBPOINTER) 291 293 295 296 311 312 313 316 9 0086H 2 LCB. . . . . . . . . . WORD MEMBER(SD) 291 311 35 000AH 2 LCB. . . . . . . . . . WORD MEMBER(XINIT) 42 0014H 4 LCBPOINTER . . . . . . POINTER 43 44 293 295 296 312 313 316 43 0014H 4 LCBPTR . . . . . . . . STRUCTURE AT 291 311 331 36 LCBSTRUCTURE . . . . . LITERALLY 44 20 0014H 1 LDSK . . . . . . . . . BYTE MEMBER(PD) 84 000AH 1 LEN. . . . . . . . . . BYTE PARAMETER AUTOMATIC 85 87 192 004AH 1 LETTERINDEX. . . . . . BYTE 215 220 221 225 230 2 LF . . . . . . . . . . LITERALLY 228 234 304 20 0000H 2 LINK . . . . . . . . . WORD MEMBER(PD) 106 0004H 2 LISTROOT . . . . . . . WORD PARAMETER AUTOMATIC 107 108 102 0004H 2 LISTROOT . . . . . . . WORD PARAMETER AUTOMATIC 103 104 2 LIT. . . . . . . . . . LITERALLY 2 4 5 6 11 15 16 17 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 46 47 48 49 50 51 52 53 54 55 59 9 008AH 1 LOCKMAX. . . . . . . . BYTE MEMBER(SD) 191 0034H 2 LOGGEDINDRIVES . . . . WORD 213 217 20 0024H 1 LST. . . . . . . . . . BYTE MEMBER(PD) 291 297 9 0052H 2 LUL. . . . . . . . . . WORD MEMBER(SD) 20 0015H 1 LUSER. . . . . . . . . BYTE MEMBER(PD) 4 MABORT . . . . . . . . LITERALLY 212 9 0076H 2 MAL. . . . . . . . . . WORD MEMBER(SD) 128 0010H 2 MAXBUFSIZ. . . . . . . WORD MEMBER(CCB) 112 0010H 2 MAXBUFSIZ. . . . . . . WORD MEMBER(CCB) 39 0010H 2 MAXBUFSIZ. . . . . . . WORD MEMBER(CCB) 122 0010H 2 MAXBUFSIZ. . . . . . . WORD MEMBER(CCB) 41 0010H 2 MAXBUFSIZ. . . . . . . WORD MEMBER(OLDCCB) 4 MCLOSEF. . . . . . . . LITERALLY 4 MCREADQ. . . . . . . . LITERALLY 205 PL/M-86 COMPILER PIN RSP - reads characters from keyboard 04/22/83 17:10:47 PAGE 19 4 MCURDSK. . . . . . . . LITERALLY 4 MCWRITEQ . . . . . . . LITERALLY 133 136 143 4 MDELAY . . . . . . . . LITERALLY 4 MDELETEF . . . . . . . LITERALLY 4 MDELETEQ . . . . . . . LITERALLY 4 MDETACH. . . . . . . . LITERALLY 4 MDIRBIOS . . . . . . . LITERALLY 4 MDISPATCH. . . . . . . LITERALLY 9 0058H 2 MDUL . . . . . . . . . WORD MEMBER(SD) 20 0016H 2 MEM. . . . . . . . . . WORD MEMBER(PD) 4 MERRMODE . . . . . . . LITERALLY 9 005AH 2 MFL. . . . . . . . . . WORD MEMBER(SD) 4 MGETCNS. . . . . . . . LITERALLY 4 MGETLOGIN. . . . . . . LITERALLY 213 4 MGETPD . . . . . . . . LITERALLY 333 122 0008H 1 MIMIC. . . . . . . . . BYTE MEMBER(CCB) 41 0008H 1 MIMIC. . . . . . . . . BYTE MEMBER(OLDCCB) 44 0008H 1 MIMIC. . . . . . . . . BYTE MEMBER(LCB) 39 0008H 1 MIMIC. . . . . . . . . BYTE MEMBER(CCB) 297 311 313 112 0008H 1 MIMIC. . . . . . . . . BYTE MEMBER(CCB) 128 0008H 1 MIMIC. . . . . . . . . BYTE MEMBER(CCB) 5 MISLEEP. . . . . . . . LITERALLY 104 5 MIWAKEUP . . . . . . . LITERALLY 108 4 MMAKEF . . . . . . . . LITERALLY 4 MMAKEQ . . . . . . . . LITERALLY 9 004CH 2 MMP. . . . . . . . . . WORD MEMBER(SD) 9 0046H 1 MODULEMAP. . . . . . . BYTE MEMBER(SD) 60 0000H MON1 . . . . . . . . . PROCEDURE EXTERNAL(2) STACK=0000H 95 100 133 136 212 63 0000H MON2 . . . . . . . . . PROCEDURE BYTE EXTERNAL(3) STACK=0000H 205 218 66 0000H MON3 . . . . . . . . . PROCEDURE WORD EXTERNAL(4) STACK=0000H 143 213 69 0000H MON4 . . . . . . . . . PROCEDURE POINTER EXTERNAL(5) STACK=0000H 333 4 MOPENF . . . . . . . . LITERALLY 4 MOPENQ . . . . . . . . LITERALLY 4 MPARSE . . . . . . . . LITERALLY 9 0040H 2 MPMSEG . . . . . . . . WORD MEMBER(SD) 9 007CH 2 MPMVERNUM. . . . . . . WORD MEMBER(SD) 4 MPRTBUF. . . . . . . . LITERALLY 4 MREADF . . . . . . . . LITERALLY 4 MREADQ . . . . . . . . LITERALLY 95 4 MREADRF. . . . . . . . LITERALLY 4 MRESETDRV. . . . . . . LITERALLY 218 4 MSELECT. . . . . . . . LITERALLY 4 MSETATT. . . . . . . . LITERALLY 4 MSETCNS. . . . . . . . LITERALLY 4 MSETDMA. . . . . . . . LITERALLY 4 MSETPRIOR. . . . . . . LITERALLY 4 MSETUSR. . . . . . . . LITERALLY 128 0009H 1 MSOURCE. . . . . . . . BYTE MEMBER(CCB) 112 0009H 1 MSOURCE. . . . . . . . BYTE MEMBER(CCB) 41 0009H 1 MSOURCE. . . . . . . . BYTE MEMBER(OLDCCB) 44 0009H 1 MSOURCE. . . . . . . . BYTE MEMBER(LCB) 296 313 39 0009H 1 MSOURCE. . . . . . . . BYTE MEMBER(CCB) 122 0009H 1 MSOURCE. . . . . . . . BYTE MEMBER(CCB) 4 MSYSDAT. . . . . . . . LITERALLY 4 MWRITEF. . . . . . . . LITERALLY 4 MWRITEQ. . . . . . . . LITERALLY 100 4 MWRITERF . . . . . . . LITERALLY PL/M-86 COMPILER PIN RSP - reads characters from keyboard 04/22/83 17:10:47 PAGE 20 6 MXCONIN. . . . . . . . LITERALLY 82 6 MXCONOUT . . . . . . . LITERALLY 88 146 354 6 MXLSTOUT . . . . . . . LITERALLY 6 MXSWITCH . . . . . . . LITERALLY 171 6 MXUPSTATUS . . . . . . LITERALLY 187 249 256 268 278 320 56 0008H 8 NAME . . . . . . . . . BYTE ARRAY(8) MEMBER(QPB) 20 0008H 8 NAME . . . . . . . . . BYTE ARRAY(8) MEMBER(PD) 35 0006H 1 NCCB . . . . . . . . . BYTE MEMBER(XINIT) 9 0049H 1 NCCB . . . . . . . . . BYTE MEMBER(SD) 128 0007H 1 NCHAR. . . . . . . . . BYTE MEMBER(CCB) 122 0007H 1 NCHAR. . . . . . . . . BYTE MEMBER(CCB) 112 0007H 1 NCHAR. . . . . . . . . BYTE MEMBER(CCB) 44 0007H 1 NCHAR. . . . . . . . . BYTE MEMBER(LCB) 41 0007H 1 NCHAR. . . . . . . . . BYTE MEMBER(OLDCCB) 39 0007H 1 NCHAR. . . . . . . . . BYTE MEMBER(CCB) 207 11 NCIODEV. . . . . . . . LITERALLY 9 0085H 1 NCIODEV. . . . . . . . BYTE MEMBER(SD) 9 0047H 1 NCNS . . . . . . . . . BYTE MEMBER(SD) 157 11 NCONDEV. . . . . . . . LITERALLY 9 0083H 1 NCONDEV. . . . . . . . BYTE MEMBER(SD) 21 0000H 1 NCOPIES. . . . . . . . BYTE EXTERNAL(1) 21 20 001DH 1 NET. . . . . . . . . . BYTE MEMBER(PD) 56 0001H 1 NET. . . . . . . . . . BYTE MEMBER(QPB) 9 004AH 1 NFLAGS . . . . . . . . BYTE MEMBER(SD) 35 0007H 1 NLST . . . . . . . . . BYTE MEMBER(XINIT) 9 0048H 1 NLST . . . . . . . . . BYTE MEMBER(SD) 11 NLSTDEV. . . . . . . . LITERALLY 9 0084H 1 NLSTDEV. . . . . . . . BYTE MEMBER(SD) 56 0004H 2 NMSGS. . . . . . . . . WORD MEMBER(QPB) 2 NO . . . . . . . . . . LITERALLY 9 004EH 1 NSLAVES. . . . . . . . BYTE MEMBER(SD) 57 0000H 2 NULL . . . . . . . . . WORD DATA 132 135 35 0005H 1 NVCNS. . . . . . . . . BYTE MEMBER(XINIT) 8 0000H 2 OFFSET . . . . . . . . WORD MEMBER(SYSDATPTR) 19 0000H 2 OFFSET . . . . . . . . WORD MEMBER(PDPTR) 323 43 0000H 2 OFFSET . . . . . . . . WORD MEMBER(LCBPTR) 291 311 38 0000H 2 OFFSET . . . . . . . . WORD MEMBER(CCBPTR) 153 332 35 0000H 2 OFFSET . . . . . . . . WORD MEMBER(XINITPTR) 41 0000H 44 OLDCCB . . . . . . . . STRUCTURE BASED(OLDCCBPOINTER) 164 165 166 167 168 173 174 175 40 0010H 4 OLDCCBPOINTER. . . . . POINTER 41 152 164 165 166 167 168 172 173 174 175 9 008BH 1 OPENMAX. . . . . . . . BYTE MEMBER(SD) 9 0088H 2 OPENVEC. . . . . . . . WORD MEMBER(SD) 20 001CH 1 ORG. . . . . . . . . . BYTE MEMBER(PD) 78 0000H 2 P1 . . . . . . . . . . WORD PARAMETER 79 75 0000H 2 P1 . . . . . . . . . . WORD PARAMETER 76 78 0000H 2 P2 . . . . . . . . . . WORD PARAMETER 79 75 0000H 2 P2 . . . . . . . . . . WORD PARAMETER 76 20 001EH 2 PARENT . . . . . . . . WORD MEMBER(PD) 128 000AH 1 PC . . . . . . . . . . BYTE MEMBER(CCB) 112 000AH 1 PC . . . . . . . . . . BYTE MEMBER(CCB) 122 000AH 1 PC . . . . . . . . . . BYTE MEMBER(CCB) 41 000AH 1 PC . . . . . . . . . . BYTE MEMBER(OLDCCB) 39 000AH 1 PC . . . . . . . . . . BYTE MEMBER(CCB) 17 PCM11. . . . . . . . . LITERALLY 17 PCMCTLC. . . . . . . . LITERALLY 193 PL/M-86 COMPILER PIN RSP - reads characters from keyboard 04/22/83 17:10:47 PAGE 21 17 PCMCTLO. . . . . . . . LITERALLY 240 17 PCMCTLS. . . . . . . . LITERALLY 261 17 PCMROUT. . . . . . . . LITERALLY 282 17 PCMRSX . . . . . . . . LITERALLY 20 0000H 48 PD . . . . . . . . . . STRUCTURE BASED(PDPOINTER) 193 240 259 261 282 291 297 325 58 0000H 2 PD . . . . . . . . . . WORD MEMBER(APB) 211 13 PDHDR. . . . . . . . . LITERALLY 20 18 0004H 4 PDPOINTER. . . . . . . POINTER 19 20 193 240 259 261 282 291 297 325 333 19 0004H 4 PDPTR. . . . . . . . . STRUCTURE AT 323 14 PDSTRUCTURE. . . . . . LITERALLY 20 16 PFACTIVE . . . . . . . LITERALLY 16 PFCHILDABORT . . . . . LITERALLY 16 PFCTLC . . . . . . . . LITERALLY 16 PFCTLD . . . . . . . . LITERALLY 16 PFKEEP . . . . . . . . LITERALLY 16 PFKERNAL . . . . . . . LITERALLY 16 PFNOCTLS . . . . . . . LITERALLY 259 16 PFPURE . . . . . . . . LITERALLY 16 PFRAW. . . . . . . . . LITERALLY 325 16 PFRESOURCE . . . . . . LITERALLY 16 PFSYS. . . . . . . . . LITERALLY 16 PFTABLE. . . . . . . . LITERALLY 16 PFTEMPKEEP . . . . . . LITERALLY 1 0000H PIN. . . . . . . . . . PROCEDURE STACK=0000H 330 06EEH 229 PLMSTART . . . . . . . PROCEDURE PUBLIC STACK=0022H 9 006EH 2 PLR. . . . . . . . . . WORD MEMBER(SD) 12 PNAMSIZ. . . . . . . . LITERALLY 20 002CH 2 PRET . . . . . . . . . WORD MEMBER(PD) 84 0014H 76 PRINTMSG . . . . . . . PROCEDURE STACK=0012H 228 229 231 232 234 304 20 0005H 1 PRIOR. . . . . . . . . BYTE MEMBER(PD) 15 PSCIOWAIT. . . . . . . LITERALLY 104 15 PSDELAY. . . . . . . . LITERALLY 15 PSDQ . . . . . . . . . LITERALLY 15 PSFLAGWAIT . . . . . . LITERALLY 15 PSNQ . . . . . . . . . LITERALLY 15 PSPOLL . . . . . . . . LITERALLY 15 PSRUN. . . . . . . . . LITERALLY 15 PSSLEEP. . . . . . . . LITERALLY 15 PSSWAP . . . . . . . . LITERALLY 15 PSTERM . . . . . . . . LITERALLY 9 005CH 2 PUL. . . . . . . . . . WORD MEMBER(SD) 75 0000H PXIOS1 . . . . . . . . PROCEDURE EXTERNAL(7) STACK=0000H 88 146 171 187 249 256 268 278 320 354 78 0000H PXIOS3 . . . . . . . . PROCEDURE WORD EXTERNAL(8) STACK=0000H 82 97 0004H 2 QADDR. . . . . . . . . WORD PARAMETER AUTOMATIC 98 99 92 0004H 2 QADDR. . . . . . . . . WORD PARAMETER AUTOMATIC 93 94 56 0002H 2 QADDR. . . . . . . . . WORD MEMBER(QPB) 94 99 131 134 141 203 122 0020H 2 QBUFF. . . . . . . . . WORD MEMBER(CCB) 112 0020H 2 QBUFF. . . . . . . . . WORD MEMBER(CCB) 41 0020H 2 QBUFF. . . . . . . . . WORD MEMBER(OLDCCB) 39 0020H 2 QBUFF. . . . . . . . . WORD MEMBER(CCB) 128 0020H 2 QBUFF. . . . . . . . . WORD MEMBER(CCB) 47 QDSTRUCTURE. . . . . . LITERALLY 54 QFDEV. . . . . . . . . LITERALLY 50 QFHIDE . . . . . . . . LITERALLY PL/M-86 COMPILER PIN RSP - reads characters from keyboard 04/22/83 17:10:47 PAGE 22 49 QFKEEP . . . . . . . . LITERALLY 48 QFMX . . . . . . . . . LITERALLY 53 QFRPL. . . . . . . . . LITERALLY 51 QFRSP. . . . . . . . . LITERALLY 52 QFTABLE. . . . . . . . LITERALLY 9 0074H 2 QLR. . . . . . . . . . WORD MEMBER(SD) 9 0060H 8 QMAU . . . . . . . . . WORD ARRAY(4) MEMBER(SD) 46 QNAMSIZ. . . . . . . . LITERALLY 56 56 0018H 16 QPB. . . . . . . . . . STRUCTURE 94 95 99 100 131 132 133 134 135 136 141 142 143 203 204 205 122 001EH 2 QPBBUFFPTR . . . . . . WORD MEMBER(CCB) 112 001EH 2 QPBBUFFPTR . . . . . . WORD MEMBER(CCB) 41 001EH 2 QPBBUFFPTR . . . . . . WORD MEMBER(OLDCCB) 39 001EH 2 QPBBUFFPTR . . . . . . WORD MEMBER(CCB) 128 001EH 2 QPBBUFFPTR . . . . . . WORD MEMBER(CCB) 128 0018H 1 QPBFLAGS . . . . . . . BYTE MEMBER(CCB) 122 0018H 1 QPBFLAGS . . . . . . . BYTE MEMBER(CCB) 112 0018H 1 QPBFLAGS . . . . . . . BYTE MEMBER(CCB) 41 0018H 1 QPBFLAGS . . . . . . . BYTE MEMBER(OLDCCB) 39 0018H 1 QPBFLAGS . . . . . . . BYTE MEMBER(CCB) 128 001CH 2 QPBNMSGS . . . . . . . WORD MEMBER(CCB) 122 001CH 2 QPBNMSGS . . . . . . . WORD MEMBER(CCB) 112 001CH 2 QPBNMSGS . . . . . . . WORD MEMBER(CCB) 41 001CH 2 QPBNMSGS . . . . . . . WORD MEMBER(OLDCCB) 39 001CH 2 QPBNMSGS . . . . . . . WORD MEMBER(CCB) 128 001AH 2 QPBQADDR . . . . . . . WORD MEMBER(CCB) 122 001AH 2 QPBQADDR . . . . . . . WORD MEMBER(CCB) 112 001AH 2 QPBQADDR . . . . . . . WORD MEMBER(CCB) 41 001AH 2 QPBQADDR . . . . . . . WORD MEMBER(OLDCCB) 39 001AH 2 QPBQADDR . . . . . . . WORD MEMBER(CCB) 128 0019H 1 QPBRESRVD. . . . . . . BYTE MEMBER(CCB) 122 0019H 1 QPBRESRVD. . . . . . . BYTE MEMBER(CCB) 112 0019H 1 QPBRESRVD. . . . . . . BYTE MEMBER(CCB) 41 0019H 1 QPBRESRVD. . . . . . . BYTE MEMBER(OLDCCB) 39 0019H 1 QPBRESRVD. . . . . . . BYTE MEMBER(CCB) 55 QPBSTRUCTURE . . . . . LITERALLY 56 128 0002H 2 QUEUE. . . . . . . . . WORD MEMBER(CCB) 122 0002H 2 QUEUE. . . . . . . . . WORD MEMBER(CCB) 112 0002H 2 QUEUE. . . . . . . . . WORD MEMBER(CCB) 44 0002H 2 QUEUE. . . . . . . . . WORD MEMBER(LCB) 316 41 0002H 2 QUEUE. . . . . . . . . WORD MEMBER(OLDCCB) 39 0002H 2 QUEUE. . . . . . . . . WORD MEMBER(CCB) 9 005EH 2 QUL. . . . . . . . . . WORD MEMBER(SD) 122 0028H 2 R1 . . . . . . . . . . WORD MEMBER(CCB) 112 0028H 2 R1 . . . . . . . . . . WORD MEMBER(CCB) 41 0028H 2 R1 . . . . . . . . . . WORD MEMBER(OLDCCB) 39 0028H 2 R1 . . . . . . . . . . WORD MEMBER(CCB) 128 0028H 2 R1 . . . . . . . . . . WORD MEMBER(CCB) 122 002AH 2 R2 . . . . . . . . . . WORD MEMBER(CCB) 112 002AH 2 R2 . . . . . . . . . . WORD MEMBER(CCB) 41 002AH 2 R2 . . . . . . . . . . WORD MEMBER(OLDCCB) 39 002AH 2 R2 . . . . . . . . . . WORD MEMBER(CCB) 128 002AH 2 R2 . . . . . . . . . . WORD MEMBER(CCB) 322 06C1H 45 RAW. . . . . . . . . . PROCEDURE BYTE STACK=001CH 341 92 0060H 23 READCHANGEMXQ. . . . . PROCEDURE STACK=000AH 164 169 198 245 252 266 273 288 128 000DH 1 RESERVD. . . . . . . . BYTE MEMBER(CCB) PL/M-86 COMPILER PIN RSP - reads characters from keyboard 04/22/83 17:10:47 PAGE 23 122 000DH 1 RESERVD. . . . . . . . BYTE MEMBER(CCB) 20 0028H 4 RESERVD. . . . . . . . BYTE ARRAY(4) MEMBER(PD) 112 000DH 1 RESERVD. . . . . . . . BYTE MEMBER(CCB) 41 000DH 1 RESERVD. . . . . . . . BYTE MEMBER(OLDCCB) 39 000DH 1 RESERVD. . . . . . . . BYTE MEMBER(CCB) 120 00DFH 22 RESETCONOUTFLAG. . . . PROCEDURE STACK=0014H 147 172 182 236 306 355 35 0003H 2 RESRVD1. . . . . . . . BYTE ARRAY(2) MEMBER(XINIT) 9 0068H 2 RLR. . . . . . . . . . WORD MEMBER(SD) 3 0000H 2 RSPLINK. . . . . . . . WORD EXTERNAL(0) 331 9 0042H 2 RSPSEG . . . . . . . . WORD MEMBER(SD) 58 0005H 1 RSRVD. . . . . . . . . BYTE MEMBER(APB) 20 002EH 2 SCRATCH. . . . . . . . WORD MEMBER(PD) 45 0036H 1 SCREEN . . . . . . . . BYTE 88 146 163 171 296 334 354 9 0000H 145 SD . . . . . . . . . . STRUCTURE BASED(SYSDATPOINTER) 153 157 291 311 332 10 0000H 1 SDBYTE . . . . . . . . BYTE BASED(SYSDATPOINTER) ARRAY(1) 8 0002H 2 SEGMENT. . . . . . . . WORD MEMBER(SYSDATPTR) 331 19 0002H 2 SEGMENT. . . . . . . . WORD MEMBER(PDPTR) 43 0002H 2 SEGMENT. . . . . . . . WORD MEMBER(LCBPTR) 331 38 0002H 2 SEGMENT. . . . . . . . WORD MEMBER(CCBPTR) 331 35 0002H 2 SEGMENT. . . . . . . . WORD MEMBER(XINITPTR) 150 0193H 39 SETCCB . . . . . . . . PROCEDURE STACK=0004H 163 110 00B8H 39 SETCONOUTFLAG. . . . . PROCEDURE STACK=0014H 145 165 170 227 303 353 20 0025H 1 SF3. . . . . . . . . . BYTE MEMBER(PD) 20 0026H 1 SF4. . . . . . . . . . BYTE MEMBER(PD) 20 0027H 1 SF5. . . . . . . . . . BYTE MEMBER(PD) SHL. . . . . . . . . . BUILTIN 223 SIZE . . . . . . . . . BUILTIN 153 291 311 102 008EH 21 SLEEP. . . . . . . . . PROCEDURE STACK=000CH 115 9 0070H 2 SLR. . . . . . . . . . WORD MEMBER(SD) 9 0008H 56 SPACE1 . . . . . . . . WORD ARRAY(28) MEMBER(SD) 9 008CH 4 SPACE2 . . . . . . . . WORD ARRAY(2) MEMBER(SD) 84 0004H 4 SPTR . . . . . . . . . POINTER PARAMETER AUTOMATIC 85 87 88 9 004BH 1 SRCHDISK . . . . . . . BYTE MEMBER(SD) 128 0005H 1 STARTCOL . . . . . . . BYTE MEMBER(CCB) 122 0005H 1 STARTCOL . . . . . . . BYTE MEMBER(CCB) 112 0005H 1 STARTCOL . . . . . . . BYTE MEMBER(CCB) 44 0005H 1 STARTCOL . . . . . . . BYTE MEMBER(LCB) 41 0005H 1 STARTCOL . . . . . . . BYTE MEMBER(OLDCCB) 39 0005H 1 STARTCOL . . . . . . . BYTE MEMBER(CCB) 235 305 20 0004H 1 STAT . . . . . . . . . BYTE MEMBER(PD) 128 000EH 2 STATE. . . . . . . . . WORD MEMBER(CCB) 129 122 000EH 2 STATE. . . . . . . . . WORD MEMBER(CCB) 112 000EH 2 STATE. . . . . . . . . WORD MEMBER(CCB) 41 000EH 2 STATE. . . . . . . . . WORD MEMBER(OLDCCB) 166 167 168 174 39 000EH 2 STATE. . . . . . . . . WORD MEMBER(CCB) 159 176 177 179 184 199 201 202 246 253 267 274 289 298 314 368 85 0000H 1 STRING . . . . . . . . BYTE BASED(SPTR) ARRAY(1) 87 88 9 0000H 8 SUPMOD . . . . . . . . WORD ARRAY(4) MEMBER(SD) 156 01BAH 295 SWITCH . . . . . . . . PROCEDURE STACK=0018H 338 7 0000H 4 SYSDATPOINTER. . . . . POINTER 8 9 10 153 157 291 311 332 8 0000H 4 SYSDATPTR. . . . . . . STRUCTURE AT 331 2 TAB. . . . . . . . . . LITERALLY 9 0050H 1 TEMPDISK . . . . . . . BYTE MEMBER(SD) 58 0002H 2 TERM . . . . . . . . . WORD MEMBER(APB) 9 0072H 2 THRDRT . . . . . . . . WORD MEMBER(SD) 20 0002H 2 THREAD . . . . . . . . WORD MEMBER(PD) 35 0000H 1 TICK . . . . . . . . . BYTE MEMBER(XINIT) PL/M-86 COMPILER PIN RSP - reads characters from keyboard 04/22/83 17:10:47 PAGE 24 9 0051H 1 TICKSPERSEC. . . . . . BYTE MEMBER(SD) 35 0001H 1 TICKSSEC . . . . . . . BYTE MEMBER(XINIT) 9 0080H 3 TOD. . . . . . . . . . BYTE ARRAY(3) MEMBER(SD) 9 007EH 2 TOD_DAY. . . . . . . . WORD MEMBER(SD) 2 TRUE . . . . . . . . . LITERALLY 185 270 324 328 335 251 04C7H 54 TURNOFFCTRLO . . . . . PROCEDURE STACK=0018H 287 369 20 0010H 2 UDA. . . . . . . . . . WORD MEMBER(PD) 20 0013H 1 USER . . . . . . . . . BYTE MEMBER(PD) 122 0024H 2 USLEEP . . . . . . . . WORD MEMBER(CCB) 112 0024H 2 USLEEP . . . . . . . . WORD MEMBER(CCB) 41 0024H 2 USLEEP . . . . . . . . WORD MEMBER(OLDCCB) 39 0024H 2 USLEEP . . . . . . . . WORD MEMBER(CCB) 210 277 128 0024H 2 USLEEP . . . . . . . . WORD MEMBER(CCB) 128 000BH 1 VC . . . . . . . . . . BYTE MEMBER(CCB) 122 000BH 1 VC . . . . . . . . . . BYTE MEMBER(CCB) 112 000BH 1 VC . . . . . . . . . . BYTE MEMBER(CCB) 41 000BH 1 VC . . . . . . . . . . BYTE MEMBER(OLDCCB) 39 000BH 1 VC . . . . . . . . . . BYTE MEMBER(CCB) 161 150 0004H 1 VC . . . . . . . . . . BYTE PARAMETER AUTOMATIC 151 153 128 0016H 2 VCMXQ. . . . . . . . . WORD MEMBER(CCB) 122 0016H 2 VCMXQ. . . . . . . . . WORD MEMBER(CCB) 112 0016H 2 VCMXQ. . . . . . . . . WORD MEMBER(CCB) 41 0016H 2 VCMXQ. . . . . . . . . WORD MEMBER(OLDCCB) 164 173 39 0016H 2 VCMXQ. . . . . . . . . WORD MEMBER(CCB) 169 183 198 208 245 247 252 254 266 269 273 275 288 319 9 007AH 2 VERNUM . . . . . . . . WORD MEMBER(SD) 9 0078H 2 VERSION. . . . . . . . WORD MEMBER(SD) 128 0012H 2 VINQ . . . . . . . . . WORD MEMBER(CCB) 122 0012H 2 VINQ . . . . . . . . . WORD MEMBER(CCB) 112 0012H 2 VINQ . . . . . . . . . WORD MEMBER(CCB) 41 0012H 2 VINQ . . . . . . . . . WORD MEMBER(OLDCCB) 39 0012H 2 VINQ . . . . . . . . . WORD MEMBER(CCB) 141 203 128 0014H 2 VOUTQ. . . . . . . . . WORD MEMBER(CCB) 131 134 122 0014H 2 VOUTQ. . . . . . . . . WORD MEMBER(CCB) 112 0014H 2 VOUTQ. . . . . . . . . WORD MEMBER(CCB) 41 0014H 2 VOUTQ. . . . . . . . . WORD MEMBER(OLDCCB) 39 0014H 2 VOUTQ. . . . . . . . . WORD MEMBER(CCB) 122 0026H 2 VSLEEP . . . . . . . . WORD MEMBER(CCB) 112 0026H 2 VSLEEP . . . . . . . . WORD MEMBER(CCB) 41 0026H 2 VSLEEP . . . . . . . . WORD MEMBER(OLDCCB) 39 0026H 2 VSLEEP . . . . . . . . WORD MEMBER(CCB) 128 0026H 2 VSLEEP . . . . . . . . WORD MEMBER(CCB) 137 20 001AH 2 WAIT . . . . . . . . . WORD MEMBER(PD) 106 00A3H 21 WAKEUP . . . . . . . . PROCEDURE STACK=000CH 124 137 210 277 316 126 00F5H 84 WAKEVOUT . . . . . . . PROCEDURE STACK=0014H 175 180 209 248 255 276 97 0077H 23 WRITECHANGEMXQ . . . . PROCEDURE STACK=000AH 173 183 208 247 254 269 275 319 139 0149H 74 WRITEVINQ. . . . . . . PROCEDURE STACK=001AH 195 242 263 284 342 370 35 0000H 12 XINIT. . . . . . . . . STRUCTURE BASED(XINITPOINTER) 35 XINITOFFSET. . . . . . LITERALLY 35 0008H 4 XINITPOINTER . . . . . POINTER 35 35 0008H 4 XINITPTR . . . . . . . STRUCTURE AT MODULE INFORMATION: CODE AREA SIZE = 07D3H 2003D CONSTANT AREA SIZE = 002FH 47D VARIABLE AREA SIZE = 004BH 75D MAXIMUM STACK SIZE = 0022H 34D 795 LINES READ 0 PROGRAM WARNINGS 0 PROGRAM ERRORS END OF PL/M-86 COMPILATION