PL/M-86 COMPILER VOUT.RSP - virtual console disk write 04/22/83 18:10:37 PAGE 1 VAX/VMS PL/M-86 V1.0 COMPILATION OF MODULE VOUT OBJECT MODULE PLACED IN VOUT.OBJ COMPILER INVOKED BY: PLM86 VOUT.PLM OPTIMIZE(3) DEBUG XREF $title('VOUT.RSP - virtual console disk write') $set(debug=0) $compact 1 vout: do; /* Disk output process. Reads Virtual OUTput Queue (VOUTQ) associated with a virtual console in buffered background mode. Output is spooled to the file VOUTX.$$$. When console is in foreground purge mode, spooled output is read from this file and dumped on the screen. There is one copy of the VOUT process per virtual console. Each VOUT RSP has its own data area, but the code is reentrant for all the VOUT RSPs. */ /* VAX commands used to generate VOUT.RSP asm86 rvout.a86 plm86 vout.plm optimize(3) debug 'p1' 'p2' 'p3' link86 rvout.obj, pxios.obj, vout.obj to vout.lnk loc86 vout.lnk od(sm(code,dats,data,const,stack)) - ad(sm(code(0))) ss(stack(0)) h86 vout.dat refmt vout.mp2 vout.2 ren vout.2 vout.mp2 the hex is uploaded to a micro to make a binary file using the command: gencmd vout data[bxxx] xxx is taken from the VOUT.MP2 file generated on the VAX by LOC86. xxx is the next paragraph after the CODE segment. */ $include (:f1:copyrt.lit) = /* = Copyright (C) 1983 = Digital Research = P.O. Box 579 = Pacific Grove, CA 93950 = */ $include (:f1:comlit.lit) 2 1 = declare = lit literally 'literally', = dcl lit 'declare', = true lit '0ffh', = false lit '0', = no lit 'not', PL/M-86 COMPILER VOUT.RSP - virtual console disk write 04/22/83 18:10:37 PAGE 2 = boolean lit 'byte', = forever lit 'while true', = cr lit '13', = lf lit '10', = tab lit '9', = ctrlc lit '3', = ff lit '12', = page$len$offset lit '1ch', = nopage$mode$offset lit '2Ch', = sectorlen lit '128'; $include (:f1:qd.lit) = /* Queue Descriptor */ 3 1 = dcl qnamsiz lit '8'; 4 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, = msgcnt word, = msgout word, = buffer word)'; = /* queue flag values */ 5 1 = dcl qf$mx lit '001h'; /* Mutual Exclusion */ 6 1 = dcl qf$keep lit '002h'; /* NO DELETE */ 7 1 = dcl qf$hide lit '004h'; /* Not User writable */ 8 1 = dcl qf$rsp lit '008h'; /* rsp queue */ 9 1 = dcl qf$table lit '010h'; /* from qd table */ 10 1 = dcl qf$rpl lit '020h'; /* rpl queue */ 11 1 = dcl qf$dev lit '040h'; /* device queue */ = /* Queue Parameter Block */ 12 1 = dcl qpb$structure lit 'structure( = flgs byte, = net byte, = qaddr word, = nmsgs word, = buffptr word, = name (qnamsiz) byte )'; $include (:f1:mfunc.lit) = /* Concurrent CP/M function numbers */ 13 1 = dcl m$prtbuf lit '9', = m$select lit '14', = m$openf lit '15', PL/M-86 COMPILER VOUT.RSP - virtual console disk write 04/22/83 18:10:37 PAGE 3 = 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', = 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$attach lit '146', = 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 */ 14 1 = dcl mi$sleep lit '0212H', = mi$wakeup lit '0213H'; = $include (:f1:mxfunc.lit) = /* MP/M-86 XIOS function numbers */ 15 1 = dcl mx$conin lit '1', = mx$conout lit '2', = mx$lstout lit '4', = mx$switch lit '7', = mx$upstatus lit '8'; $include (:f1:fcb.lit) 16 1 = declare = f$drvusr lit '0', /* drive/user byte */ = f$name lit '1', /* file name */ = f$namelen lit '8', /* file name length */ = f$type lit '9', /* file type field */ = f$typelen lit '3', /* type length */ PL/M-86 COMPILER VOUT.RSP - virtual console disk write 04/22/83 18:10:37 PAGE 4 = f$rw lit '9', /* high bit is R/W attribute */ = f$dirsys lit '10', /* high bit is dir/sys attribute */ = f$arc lit '11', /* high bit is archive attribute */ = f$ex lit '12', /* extent */ = f$s1 lit '13', /* module byte */ = f$rc lit '15', /* record count */ = f$diskmap lit '16', /* file disk map */ = diskmaplen lit '16', /* disk map length */ = f$drvusr2 lit '16', /* fcb2 */ = f$name2 lit '17', = f$type2 lit '25', = f$cr lit '32', /* current record */ = f$rrec lit '33', /* random record */ = f$rreco lit '35'; /* " " overflow */ 17 1 dcl name$len lit '4'; /* number of letters in RSP name: 'VOUT' */ 18 1 dcl fcblen lit '36'; 19 1 dcl rsplink word external; /* set to SYSDAT by O.S. initialization */ 20 1 dcl udaseg word external; /* DS for this process */ 21 1 dcl ncopies byte external; 22 1 dcl copynum byte at (.ncopies); /* VOUT process copy number, also the */ /* virtual console number for console */ /* output to the XIOS */ $include (:f1:sd.lit) = /* System Data Page */ 23 1 = dcl sysdat$pointer pointer; 24 1 = dcl sysdat$ptr structure( = offset word, = segment word) at (@sysdat$pointer); 25 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 */ = space(28) word, = mpmseg word, = rspseg word, = endseg word, = module$map byte, = ncns byte, = nlst byte, = nccb byte, = nflags byte, = srchdisk byte, = mmp word, = nslaves byte, = dayfile byte, = tempdisk byte, PL/M-86 COMPILER VOUT.RSP - virtual console disk write 04/22/83 18:10:37 PAGE 5 = 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 (2) word, = tod_sec byte, = ncondev byte, = nlstdev byte, = nciodev byte, = lcb (2) word, = lckmax byte, = opmax byte, = sysltot (2) word, = cmod byte ); = = 26 1 = declare sd$byte based sysdat$pointer (1) byte; 27 1 dcl ccb$pointer pointer; 28 1 dcl ccb$ptr structure ( offset address, segment address) at (@ccb$pointer); $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 | PL/M-86 COMPILER VOUT.RSP - virtual console disk write 04/22/83 18:10:37 PAGE 6 = +---------+---------+---------+---------+ = 20 | qbuff | cosleep | = +---------+---------+---------+---------+ = 24 | usleep | vsleep | = +---------+---------+---------+---------+ = 28 | ... reserved ... | = +---------+---------+---------+---------+ = */ 29 1 = dcl ccb$structure lit 'structure (attach address, queue address, = flag byte, startcol byte, column byte, nchar byte, mimic byte, msource byte, = ccb$tail1'; 30 1 = dcl ccb$tail1 lit = 'pc byte, vc byte, btmp byte, reservd byte, state word, maxbufsiz word, = ccb$tail2'; 31 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)'; 32 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 */ = /* conout goes to XIOS */ = /* state word flags */ 33 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'; 34 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); PL/M-86 COMPILER VOUT.RSP - virtual console disk write 04/22/83 18:10:37 PAGE 7 35 1 = dcl lcb$structure lit 'structure (attach address, queue address, = flag byte, startcol byte, column byte, nchar byte, = mimic byte, msource byte)'; 36 1 dcl ccb based ccb$pointer ccb$structure; 37 1 dcl data$msg lit '0'; 38 1 dcl wake$msg lit '0ffh'; 39 1 dcl voutq$msg structure ( dayta byte, type byte); 40 1 mon1: procedure (func,a) external; 41 2 dcl func byte, a address; 42 2 end mon1; 43 1 mon2: procedure (func,a) byte external; 44 2 dcl func byte, a address; 45 2 end mon2; 46 1 mon4: procedure (func,a) pointer external; 47 2 dcl func byte, a address; 48 2 end mon4; 49 1 intsys: procedure (cx, dx, bx) external; /* internal O.S. functions */ 50 2 dcl (cx, dx, bx) word; /* see RVOUT module */ 51 2 end intsys; /* special disk output assembly module */ 52 1 pxios1: procedure (func,p1,p2) external; 53 2 dcl func byte, (p1,p2) address; /* XIOS interface for process */ 54 2 end pxios1; /* not in the O.S. */ 55 1 dcl ps$ciosleep lit '9'; 56 1 sleep: procedure(addr); 57 2 dcl addr word; 58 2 call intsys(mi$sleep, addr, ps$ciosleep); 59 2 end sleep; 60 1 wakeup: procedure(addr); 61 2 dcl addr word; 62 2 call intsys(mi$wakeup, addr, 0); 63 2 end wakeup; $if debug=1 /* conditionally compiled error print routines */ print$msg: procedure(endchar, sptr); dcl (i, endchar) byte, sptr pointer, string based sptr (1) byte; i = 0; do while string(i) <> endchar; call pxios1(mx$conout, string(i), copynum); PL/M-86 COMPILER VOUT.RSP - virtual console disk write 04/22/83 18:10:37 PAGE 8 i = i + 1; end; end print$msg; print$hex: procedure (nib); dcl nib byte; nib = nib and 0fh; if nib < 10 then call pxios1(mx$conout, nib + '0', copynum); else call pxios1(mx$conout, nib + 'A' - 10, copynum); end print$hex; error: procedure(msgptr); dcl msgptr pointer; call print$msg(0, @(cr, lf, '**** VOUT ERROR **** ',0)); call print$msg(0, msgptr); call print$msg(0, @(', CCB.STATE = ', 0)); call print$hex(shr(ccb.state, 12)); call print$hex(shr(ccb.state, 8)); call print$hex(shr(ccb.state, 4)); call print$hex(ccb.state); call print$msg(0, @('H', cr, lf, 0)); end error; $endif 64 1 read$change$mxq: procedure; 65 2 qpb.qaddr = ccb.vcmxq; 66 2 call mon1 (m$readq, .qpb); 67 2 end read$change$mxq; 68 1 write$change$mxq: procedure; 69 2 qpb.qaddr = ccb.vcmxq; 70 2 call mon1 (m$writeq, .qpb); 71 2 end write$change$mxq; 72 1 dcl logeof lit '0ffh'; 73 1 dcl dump$op lit '0ffh'; 74 1 dcl writing boolean initial (false); 75 1 dcl delete$flag boolean initial (true); /* delete when convienient */ 76 1 dcl deleted boolean initial (true); /* has been deleted */ 77 1 dcl file$is$empty boolean initial (true); 78 1 dcl rrr address initial(0); /* next random record to read */ 79 1 dcl wrr address initial(0); /* next random record to write */ 80 1 delete$file: procedure; 81 2 call mon1(m$closef, .fcb); /* force allocation vector */ 82 2 call mon1(m$deletef, .fcb); /* update */ 83 2 delete$flag = false; 84 2 deleted = true; 85 2 end delete$file; 86 1 make$file: procedure boolean; 87 2 call setb(0, @fcb(f$ex), fcblen-f$ex); 88 2 fcb(f$drvusr) = sd.tempdisk + 1; /* try deleting the file in case drive */ PL/M-86 COMPILER VOUT.RSP - virtual console disk write 04/22/83 18:10:37 PAGE 9 89 2 call mon1(m$deletef, .fcb); /* was read only when delet$file was */ /* called or tempdisk has changed */ 90 2 if mon2(m$makef, .fcb) = 0ffh then /* open in locked mode */ 91 2 return(false); /* error - force open attempt next time */ 92 2 deleted = false; 93 2 return(true); /* fcb(f$ex) = fcb(f$ex) or 80h; /* make system */ /* call mon1(m$setatt, .fcb); */ 94 2 end make$file; 95 1 reset$file: procedure; 96 2 delete$flag, file$is$empty = true; 97 2 writing = false; /* force setdma */ 98 2 wrr, rrr = 0; /* not necessary ? */ 99 2 end reset$file; 100 1 dcl bufsiz lit '128'; 101 1 dcl in$buf(bufsiz) byte; /* buffer to fill on from reading VOUTQ */ 102 1 dcl in$ptr word initial (0ffffh); /* initially empty buffer */ 103 1 dcl purge$buf (buf$siz) byte; /* buffer to use when purging */ 104 1 dcl purge$ptr word initial (0ffffh); 105 1 dcl num$purge$buf$chars word initial (0); 106 1 write$buf: procedure boolean; 107 2 if deleted then 108 2 do; 109 3 if not make$file then /* delete and make file */ 110 3 return(false); 111 3 end; 112 2 else if rrr = wrr and not file$is$empty then 113 2 return(false); /* don't write if we haven't purged it yet */ if not writing then /* we want to be in write mode */ 115 2 do; 116 3 call mon1(m$setdma,.in$buf); 117 3 writing = true; 118 3 end; 119 2 fcb(f$rrec) = low(wrr); 120 2 fcb(f$rrec+1) = high(wrr); 121 2 if mon2(m$writerf, .fcb) <> 0 then 122 2 return(false); /* out of disk space or physical error */ 123 2 file$is$empty = false; 124 2 in$ptr = 0ffffh; 125 2 wrr = (wrr + 1) mod (ccb.maxbufsiz * 8); /* next record to write */ 126 2 return(true); 127 2 end write$buf; 128 1 read$buf: procedure boolean; 129 2 dcl ret boolean; 130 2 if file$is$empty then 131 2 do; 132 3 if not deleted then /* made file but had a write error */ 133 3 call reset$file; 134 3 return(false); 135 3 end; 136 2 if writing then /* we want to be in read mode */ PL/M-86 COMPILER VOUT.RSP - virtual console disk write 04/22/83 18:10:37 PAGE 10 137 2 do; 138 3 call mon1(m$setdma, .purge$buf); 139 3 writing = false; 140 3 end; 141 2 fcb(f$rrec) = low(rrr); 142 2 fcb(f$rrec+1) = high(rrr); 143 2 ret = mon2(m$readrf,.fcb) = 0; /* physical error if false - skips record */ 144 2 rrr = (rrr + 1) mod (ccb.maxbufsiz * 8); 145 2 if rrr = wrr then /* done with file ? */ 146 2 call reset$file; 147 2 return(ret); /* return read status */ 148 2 end read$buf; 149 1 dcl active$msg boolean initial (false); 150 1 read$voutq: procedure; 151 2 if active$msg then 152 2 return; 153 2 qpb.qaddr = ccb.voutq; 154 2 qpb.buffptr = .voutq$msg; 155 2 call mon1(m$readq, .qpb); 156 2 if voutq$msg.type = data$msg then 157 2 active$msg = true; 158 2 end read$voutq; 159 1 drain$voutq: procedure(char$adr) boolean; 160 2 dcl char$adr address; /* return false if no chars found in */ 161 2 dcl char based char$adr byte; /* VOUTQ, return true and put char @ */ 162 2 dcl (have$a$char, qempty) boolean; /* char$adr if there is one */ 163 2 qpb.qaddr = ccb.voutq; 164 2 qpb.buffptr = .voutq$msg; 165 2 have$a$char, qempty = false; 166 2 do while not have$a$char and not qempty; 167 3 if mon2(m$creadq, .qpb) = 0 then /* successful queue read */ 168 3 have$a$char = voutq$msg.type = data$msg; /* and msg is data */ else 169 3 qempty = true; 170 3 end; 171 2 char = voutq$msg.dayta; 172 2 if qempty then 173 2 return(false); /* no chars in queue */ 174 2 return(true); /* char was a data msg */ 175 2 end drain$voutq; 176 1 put$char: procedure boolean; 177 2 active$msg = false; 178 2 if voutq$msg.type <> data$msg then 179 2 return(true); 180 2 voutq$msg.type = wake$msg; /* probably garbage */ 181 2 in$buf(in$ptr := in$ptr + 1) = voutq$msg.dayta; 182 2 if in$ptr = buf$siz - 1 then 183 2 return(write$buf); /* don't call again no write */ 184 2 return(true); 185 2 end put$char; 186 1 get$char: procedure (charadr) boolean; 187 2 dcl charadr address, char based charadr byte; 188 2 if purge$ptr + 1 = num$purge$buf$chars then PL/M-86 COMPILER VOUT.RSP - virtual console disk write 04/22/83 18:10:37 PAGE 11 189 2 if read$buf then 190 2 do; 191 3 num$purge$buf$chars = bufsiz; 192 3 purge$ptr = 0ffffh; 193 3 end; 194 2 else if in$ptr <> 0ffffh then /* data in buff but not in file */ 195 2 do; 196 3 call move(in$ptr + 1, .in$buf, .purge$buf); 197 3 write$pending = false; 198 3 num$purge$buf$chars = in$ptr + 1; 199 3 in$ptr, purge$ptr = 0ffffh; /* indicate data in purge$buf */ 200 3 end; 201 2 else if active$msg then 202 2 do; 203 3 active$msg = false; 204 3 char = voutq$msg.dayta; 205 3 return(true); 206 3 end; else 207 2 do; 208 3 if not drain$voutq(char$adr) then /* get chars from VOUTQ */ 209 3 do; 210 4 do while (ccb.flag and cf$vout) <> 0; /* user process is NQing wait */ 211 5 call mon1(m$delay, 2); /* for q write to finish */ 212 5 end; 213 4 return(drain$voutq(char$adr)); /* now read message, usr proc */ 214 4 end; /* sleeps because of state */ else 215 3 return(true); /* got a char from VOUTQ */ 216 3 end; 217 2 purge$ptr = purge$ptr + 1; 218 2 char = purge$buf(purge$ptr); 219 2 return (true); 220 2 end get$char; 221 1 full$disk: procedure; /* arrive when we can't write*/ 222 2 call read$change$mxq; /* to the disk */ 223 2 if (ccb.state and csm$purging) = 0 then /* wait for PIN to switch us */ /* to the foreground, */ 224 2 ccb.state = ccb.state or csm$filefull; /* csm$file$full and csm$pur-*/ /* ging are mutually exclusive*/ 225 2 call write$change$mxq; 226 2 end full$disk; 227 1 dcl write$pending boolean initial (false); 228 1 buffer: procedure; 229 2 if write$pending then 230 2 if write$pending := not write$buf then 231 2 do; 232 3 call full$disk; 233 3 return; 234 3 end; 235 2 do while (ccb.state and not double(csm$ctrlP)) = csm$buffered + csm$background; 236 3 call read$voutq; /* always do something with the */ 237 3 if write$pending := not putchar then /* character ! */ 238 3 do; PL/M-86 COMPILER VOUT.RSP - virtual console disk write 04/22/83 18:10:37 PAGE 12 239 4 call full$disk; 240 4 return; 241 4 end; 242 3 end; 243 2 end buffer; 244 1 dcl purgeok$mask lit '(csm$background or csm$abort or csm$ctrlS)'; 245 1 purge: procedure; 246 2 dcl (char, count) byte; 247 2 dcl controlP boolean; 248 2 dcl more$in$file boolean; 249 2 more$in$file = true; 250 2 do while (ccb.state and purgeok$mask) = 0 and more$in$file; 251 3 call read$change$mxq; 252 3 controlP = (ccb.state and csm$ctrlP) <> 0; 253 3 if (ccb.state and purgeok$mask) = 0 then 254 3 do; 255 4 disable; 256 4 do while (ccb.flag and cf$conout) <> 0; 257 5 call sleep(.ccb.cosleep); 258 5 end; 259 4 ccb.flag = ccb.flag or cf$conout; 260 4 enable; 261 4 count = 0; 262 4 do while more$in$file and count < 40; /* for performance, purge 40 */ 263 5 if (more$in$file := get$char(.char)) and /* chars before allowing */ (ccb.state and csm$ctrlO) = 0 then /* state to change, 40 is */ 264 5 do; /* is somewhat arbitrary */ 265 6 call pxios1(mx$conout, char, copynum); 266 6 if controlP then 267 6 call pxios1(mx$lstout, char, ccb.mimic); 268 6 end; 269 5 count = count + 1; 270 5 end; 271 4 ccb.flag = ccb.flag and not cf$conout; 272 4 call write$change$mxq; /* possibly wake up PIN */ 273 4 call wakeup(.ccb.cosleep); /* or user process */ 274 4 end; else 275 3 call write$change$mxq; 276 3 end; 277 2 if not more$in$file then 278 2 do; 279 3 num$purge$buf$chars = 0; 280 3 purge$ptr, inptr = 0ffffh; 281 3 call read$change$mxq; 282 3 if (ccb.state and csm$purging) <> 0 then 283 3 do; 284 4 ccb.state = ccb.state and not double(csm$purging); 285 4 call pxios1(mx$upstatus, 0, 0); 286 4 end; 287 3 call write$change$mxq; 288 3 end; 289 2 call wakeup(.ccb.usleep); /* wake up user process */ 290 2 end purge; PL/M-86 COMPILER VOUT.RSP - virtual console disk write 04/22/83 18:10:37 PAGE 13 291 1 abort: procedure; 292 2 dcl junk word; 293 2 do while drain$voutq(.junk); /* drain input queue */ 294 3 end; /* may wake up user process */ 295 2 call read$change$mxq; 296 2 ccb.state = ccb.state and not double(csm$abort); 297 2 call write$change$mxq; 298 2 call reset$file; 299 2 write$pending = false; 300 2 purge$ptr, inptr = 0ffffh; 301 2 num$purge$buf$chars = 0; 302 2 call wakeup(.ccb.usleep); /* wake up user process */ 303 2 end abort; 304 1 initq: procedure(qdaddr) address; 305 2 dcl qdaddr address; 306 2 dcl ret boolean; 307 2 dcl iqd based qdaddr qd$structure; 308 2 call move(qnamsiz, .iqd.name, .qpb.name); 309 2 ret = mon2(m$makeq, qdaddr); /* 0ffh return = error */ 310 2 ret = ret or mon2(m$openq, .qpb); /* ret = 0 if no error */ $if debug = 1 if ret then /* if debugging print error */ call error(@('Queue initialization error',0)); $endif 311 2 return(qpb.qaddr); 312 2 end initq; 313 1 dcl pd$pointer pointer; /* in RSP assembly interface */ 314 1 dcl pd based pd$pointer (1) byte; 315 1 dcl pd$name lit '8'; 316 1 dcl voutq$buf (32) byte; 317 1 dcl voutq qd$structure initial (0,0,0, qf$hide + qf$keep, 'VOUTQ ',2,16,0,0,0,0,.voutq$buf); 318 1 dcl vinq$buf (64) byte; /* 64 bytes type ahead */ 319 1 dcl vinq qd$structure initial (0,0,0, qf$keep + qf$hide, 'VINQ ',1,64,0,0,0,0,.vinq$buf); 320 1 dcl vcmxq qd$structure initial (0,0,0,qf$keep + qf$mx + qf$hide, 'VCMXQ ',0,1,0,0,0,0,0); 321 1 dcl qpb qpb$structure; 322 1 dcl dummy (1) byte data ('Z'); /* make constant segment non-zero to */ /* hex generation */ 323 1 dcl fcb(36) byte initial (0,' ', '$$$'); /* initialization */ 324 1 plmstart: procedure public; 325 2 dcl save$state word; PL/M-86 COMPILER VOUT.RSP - virtual console disk write 04/22/83 18:10:37 PAGE 14 326 2 call mon1(m$errmode, 0ffh); /* don't display errors */ 327 2 ccb$ptr.segment, sysdat$ptr.segment = rsplink; 328 2 sysdat$ptr.offset = 0; 329 2 ccb$ptr.offset = sd.ccb + copynum * size(ccb); 330 2 pd$pointer = mon4(m$getpd,0); 331 2 call movb(@pd(pd$name), @fcb(f$name), qnamsiz); 332 2 call move(4, .fcb(f$name + name$len), .vinq.name(4)); 333 2 ccb.vinq = initq(.vinq); 334 2 call move(3, .fcb(f$name + name$len), .voutq.name(5)); 335 2 ccb.voutq = initq(.voutq); 336 2 call move(3, .fcb(f$name + name$len), .vcmxq.name(5)); 337 2 ccb.vcmxq = initq(.vcmxq); 338 2 call mon1(m$setcns, copynum); /* copynum is virtual console # */ 339 2 fcb(f$drvusr) = sd.tempdisk + 1; 340 2 call write$change$mxq; /* write initial MX message */ 341 2 call mon1(m$setprior, 200); 342 2 do forever; 343 3 if delete$flag then 344 3 call delete$file; 345 3 if (ccb.state and not double(csm$ctrlP + csm$ctrlO)) = csm$buffered + csm$background then /* if ctrlO,background and */ 346 3 call buffer; /* buffered, then sleep */ 347 3 else if ( (ccb.state and not double(csm$ctrlO + csm$ctrlP)) and csm$purging) <> 0 then 348 3 call purge; 349 3 else if (ccb.state and csm$abort) <> 0 then 350 3 call abort; if delete$flag then 352 3 call delete$file; else 353 3 call read$voutq; 354 3 end; 355 2 end plmstart; 356 1 end vout; PL/M-86 COMPILER VOUT.RSP - virtual console disk write 04/22/83 18:10:37 PAGE 15 CROSS-REFERENCE LISTING ----------------------- DEFN ADDR SIZE NAME, ATTRIBUTES, AND REFERENCES ----- ------ ----- -------------------------------- 46 0000H 2 A. . . . . . . . . WORD PARAMETER 47 43 0000H 2 A. . . . . . . . . WORD PARAMETER 44 40 0000H 2 A. . . . . . . . . WORD PARAMETER 41 291 0500H 69 ABORT. . . . . . . PROCEDURE STACK=0010H 350 149 0189H 1 ACTIVEMSG. . . . . BYTE INITIAL 151 157 177 201 203 56 0004H 2 ADDR . . . . . . . WORD PARAMETER AUTOMATIC 57 58 60 0004H 2 ADDR . . . . . . . WORD PARAMETER AUTOMATIC 61 62 36 0000H 2 ATTACH . . . . . . WORD MEMBER(CCB) 2 BOOLEAN. . . . . . LITERALLY 74 75 76 77 86 106 128 129 149 159 162 176 186 227 247 248 306 36 000CH 1 BTMP . . . . . . . BYTE MEMBER(CCB) 319 001AH 2 BUFFER . . . . . . WORD MEMBER(VINQ) 228 037DH 53 BUFFER . . . . . . PROCEDURE STACK=0014H 346 320 001AH 2 BUFFER . . . . . . WORD MEMBER(VCMXQ) 317 001AH 2 BUFFER . . . . . . WORD MEMBER(VOUTQ) 307 001AH 2 BUFFER . . . . . . WORD MEMBER(IQD) 321 0006H 2 BUFFPTR. . . . . . WORD MEMBER(QPB) 154 164 100 BUFSIZ . . . . . . LITERALLY 101 103 182 191 49 0000H 2 BX . . . . . . . . WORD PARAMETER 50 36 0000H 44 CCB. . . . . . . . STRUCTURE BASED(CCBPOINTER) 65 69 125 144 153 163 210 223 224 235 250 252 253 256 257 259 263 267 271 273 282 284 289 296 302 329 333 335 337 345 347 349 34 0008H 2 CCB. . . . . . . . WORD MEMBER(XINIT) 25 0054H 2 CCB. . . . . . . . WORD MEMBER(SD) 329 27 0004H 4 CCBPOINTER . . . . POINTER 28 36 65 69 125 144 153 163 210 223 224 235 250 252 253 256 257 259 263 267 271 273 282 284 289 296 302 333 335 337 345 347 349 28 0004H 4 CCBPTR . . . . . . STRUCTURE AT 327 329 29 CCBSTRUCTURE . . . LITERALLY 36 30 CCBTAIL1 . . . . . LITERALLY 36 31 CCBTAIL2 . . . . . LITERALLY 36 32 CFBUFP . . . . . . LITERALLY 32 CFCOMPC. . . . . . LITERALLY 32 CFCONOUT . . . . . LITERALLY 256 259 271 32 CFLISTCP . . . . . LITERALLY 32 CFSWITCHS. . . . . LITERALLY 32 CFVOUT . . . . . . LITERALLY 210 161 0000H 1 CHAR . . . . . . . BYTE BASED(CHARADR) 171 246 018DH 1 CHAR . . . . . . . BYTE 263 265 267 187 0000H 1 CHAR . . . . . . . BYTE BASED(CHARADR) 204 218 159 0004H 2 CHARADR. . . . . . WORD PARAMETER AUTOMATIC 160 161 171 186 0004H 2 CHARADR. . . . . . WORD PARAMETER AUTOMATIC 187 204 208 213 218 25 0090H 1 CMOD . . . . . . . BYTE MEMBER(SD) 36 0006H 1 COLUMN . . . . . . BYTE MEMBER(CCB) 247 018FH 1 CONTROLP . . . . . BYTE 252 266 22 0000H 1 COPYNUM. . . . . . BYTE EXTERNAL(2) AT 265 329 338 36 0022H 2 COSLEEP. . . . . . WORD MEMBER(CCB) 257 273 246 018EH 1 COUNT. . . . . . . BYTE 261 262 269 2 CR . . . . . . . . LITERALLY PL/M-86 COMPILER VOUT.RSP - virtual console disk write 04/22/83 18:10:37 PAGE 16 33 CSMABORT . . . . . LITERALLY 250 253 296 349 33 CSMBACKGROUND. . . LITERALLY 235 250 253 345 33 CSMBUFFERED. . . . LITERALLY 235 345 33 CSMCTRLO . . . . . LITERALLY 263 345 347 33 CSMCTRLP . . . . . LITERALLY 235 252 345 347 33 CSMCTRLS . . . . . LITERALLY 250 253 33 CSMFILEFULL. . . . LITERALLY 224 33 CSMNOSWITCH. . . . LITERALLY 33 CSMPURGING . . . . LITERALLY 223 282 284 347 33 CSMSUSPEND . . . . LITERALLY 2 CTRLC. . . . . . . LITERALLY 49 0000H 2 CX . . . . . . . . WORD PARAMETER 50 37 DATAMSG. . . . . . LITERALLY 156 168 178 25 004FH 1 DAYFILE. . . . . . BYTE MEMBER(SD) 39 0000H 1 DAYTA. . . . . . . BYTE MEMBER(VOUTQMSG) 171 181 204 2 DCL. . . . . . . . LITERALLY 76 0086H 1 DELETED. . . . . . BYTE INITIAL 84 92 107 132 80 005EH 35 DELETEFILE . . . . PROCEDURE STACK=0008H 344 352 75 0085H 1 DELETEFLAG . . . . BYTE INITIAL 83 96 343 351 16 DISKMAPLEN . . . . LITERALLY 25 006AH 2 DLR. . . . . . . . WORD MEMBER(SD) 34 0002H 1 DOOR . . . . . . . BYTE MEMBER(XINIT) DOUBLE . . . . . . BUILTIN 235 284 296 345 347 320 0012H 2 DQ . . . . . . . . WORD MEMBER(VCMXQ) 317 0012H 2 DQ . . . . . . . . WORD MEMBER(VOUTQ) 307 0012H 2 DQ . . . . . . . . WORD MEMBER(IQD) 319 0012H 2 DQ . . . . . . . . WORD MEMBER(VINQ) 159 0219H 108 DRAINVOUTQ . . . . PROCEDURE BYTE STACK=000AH 208 213 293 25 006CH 2 DRL. . . . . . . . WORD MEMBER(SD) 322 0000H 1 DUMMY. . . . . . . BYTE ARRAY(1) DATA 73 DUMPOP . . . . . . LITERALLY 49 0000H 2 DX . . . . . . . . WORD PARAMETER 50 25 0044H 2 ENDSEG . . . . . . WORD MEMBER(SD) 2 FALSE. . . . . . . LITERALLY 74 83 91 92 97 110 113 122 123 134 139 149 165 173 177 197 203 227 299 16 FARC . . . . . . . LITERALLY 323 01F2H 36 FCB. . . . . . . . BYTE ARRAY(36) INITIAL 81 82 87 88 89 90 119 120 121 141 142 143 331 332 334 336 339 18 FCBLEN . . . . . . LITERALLY 87 16 FCR. . . . . . . . LITERALLY 16 FDIRSYS. . . . . . LITERALLY 16 FDISKMAP . . . . . LITERALLY 16 FDRVUSR. . . . . . LITERALLY 88 339 16 FDRVUSR2 . . . . . LITERALLY 16 FEX. . . . . . . . LITERALLY 87 2 FF . . . . . . . . LITERALLY 77 0087H 1 FILEISEMPTY. . . . BYTE INITIAL 96 112 123 130 36 0004H 1 FLAG . . . . . . . BYTE MEMBER(CCB) 210 256 259 271 317 0004H 2 FLAGS. . . . . . . WORD MEMBER(VOUTQ) 25 0056H 2 FLAGS. . . . . . . WORD MEMBER(SD) 307 0004H 2 FLAGS. . . . . . . WORD MEMBER(IQD) 320 0004H 2 FLAGS. . . . . . . WORD MEMBER(VCMXQ) 319 0004H 2 FLAGS. . . . . . . WORD MEMBER(VINQ) 321 0000H 1 FLGS . . . . . . . BYTE MEMBER(QPB) 16 FNAME. . . . . . . LITERALLY 331 332 334 336 16 FNAME2 . . . . . . LITERALLY 16 FNAMELEN . . . . . LITERALLY PL/M-86 COMPILER VOUT.RSP - virtual console disk write 04/22/83 18:10:37 PAGE 17 2 FOREVER. . . . . . LITERALLY 342 16 FRC. . . . . . . . LITERALLY 16 FRREC. . . . . . . LITERALLY 119 120 141 142 16 FRRECO . . . . . . LITERALLY 16 FRW. . . . . . . . LITERALLY 16 FS1. . . . . . . . LITERALLY 16 FTYPE. . . . . . . LITERALLY 16 FTYPE2 . . . . . . LITERALLY 16 FTYPELEN . . . . . LITERALLY 221 035CH 33 FULLDISK . . . . . PROCEDURE STACK=000CH 232 239 52 0000H 1 FUNC . . . . . . . BYTE PARAMETER 53 40 0000H 1 FUNC . . . . . . . BYTE PARAMETER 41 46 0000H 1 FUNC . . . . . . . BYTE PARAMETER 47 43 0000H 1 FUNC . . . . . . . BYTE PARAMETER 44 186 02B8H 164 GETCHAR. . . . . . PROCEDURE BYTE STACK=0010H 263 162 018AH 1 HAVEACHAR. . . . . BYTE 165 166 168 HIGH . . . . . . . BUILTIN 120 142 101 0088H 128 INBUF. . . . . . . BYTE ARRAY(128) 116 181 196 304 0545H 53 INITQ. . . . . . . PROCEDURE WORD STACK=000AH 333 335 337 102 0012H 2 INPTR. . . . . . . WORD INITIAL 124 181 182 194 196 198 199 280 300 49 0000H INTSYS . . . . . . PROCEDURE EXTERNAL(6) STACK=0000H 58 62 307 0000H 28 IQD. . . . . . . . STRUCTURE BASED(QDADDR) 308 292 0018H 2 JUNK . . . . . . . WORD 293 34 000AH 2 LCB. . . . . . . . WORD MEMBER(XINIT) 25 0086H 4 LCB. . . . . . . . WORD ARRAY(2) MEMBER(SD) 35 LCBSTRUCTURE . . . LITERALLY 25 008AH 1 LCKMAX . . . . . . BYTE MEMBER(SD) 2 LF . . . . . . . . LITERALLY 320 0000H 2 LINK . . . . . . . WORD MEMBER(VCMXQ) 317 0000H 2 LINK . . . . . . . WORD MEMBER(VOUTQ) 307 0000H 2 LINK . . . . . . . WORD MEMBER(IQD) 319 0000H 2 LINK . . . . . . . WORD MEMBER(VINQ) 2 LIT. . . . . . . . LITERALLY 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 29 30 31 32 33 34 35 37 38 55 72 73 100 244 315 72 LOGEOF . . . . . . LITERALLY LOW. . . . . . . . BUILTIN 119 141 25 0052H 2 LUL. . . . . . . . WORD MEMBER(SD) 13 MABORT . . . . . . LITERALLY 86 0081H 67 MAKEFILE . . . . . PROCEDURE BYTE STACK=0008H 109 25 0076H 2 MAL. . . . . . . . WORD MEMBER(SD) 13 MATTACH. . . . . . LITERALLY 36 0010H 2 MAXBUFSIZ. . . . . WORD MEMBER(CCB) 125 144 13 MCLOSEF. . . . . . LITERALLY 81 13 MCREADQ. . . . . . LITERALLY 167 13 MCURDSK. . . . . . LITERALLY 13 MCWRITEQ . . . . . LITERALLY 13 MDELAY . . . . . . LITERALLY 211 13 MDELETEF . . . . . LITERALLY 82 89 13 MDELETEQ . . . . . LITERALLY 13 MDETACH. . . . . . LITERALLY 13 MDIRBIOS . . . . . LITERALLY 13 MDISPATCH. . . . . LITERALLY 25 0058H 2 MDUL . . . . . . . WORD MEMBER(SD) 13 MERRMODE . . . . . LITERALLY 326 25 005AH 2 MFL. . . . . . . . WORD MEMBER(SD) 13 MGETCNS. . . . . . LITERALLY PL/M-86 COMPILER VOUT.RSP - virtual console disk write 04/22/83 18:10:37 PAGE 18 13 MGETLOGIN. . . . . LITERALLY 13 MGETPD . . . . . . LITERALLY 330 36 0008H 1 MIMIC. . . . . . . BYTE MEMBER(CCB) 267 14 MISLEEP. . . . . . LITERALLY 58 14 MIWAKEUP . . . . . LITERALLY 62 13 MMAKEF . . . . . . LITERALLY 90 13 MMAKEQ . . . . . . LITERALLY 309 25 004CH 2 MMP. . . . . . . . WORD MEMBER(SD) 25 0046H 1 MODULEMAP. . . . . BYTE MEMBER(SD) 40 0000H MON1 . . . . . . . PROCEDURE EXTERNAL(3) STACK=0000H 66 70 81 82 89 116 138 155 211 326 338 341 43 0000H MON2 . . . . . . . PROCEDURE BYTE EXTERNAL(4) STACK=0000H 90 121 143 167 309 310 46 0000H MON4 . . . . . . . PROCEDURE POINTER EXTERNAL(5) STACK=0000H 330 13 MOPENF . . . . . . LITERALLY 13 MOPENQ . . . . . . LITERALLY 310 248 0190H 1 MOREINFILE . . . . BYTE 249 250 262 263 277 MOVB . . . . . . . BUILTIN 331 MOVE . . . . . . . BUILTIN 196 308 332 334 336 13 MPARSE . . . . . . LITERALLY 25 0040H 2 MPMSEG . . . . . . WORD MEMBER(SD) 25 007CH 2 MPMVERNUM. . . . . WORD MEMBER(SD) 13 MPRTBUF. . . . . . LITERALLY 13 MREADF . . . . . . LITERALLY 13 MREADQ . . . . . . LITERALLY 66 155 13 MREADRF. . . . . . LITERALLY 143 13 MRESETDRV. . . . . LITERALLY 13 MSELECT. . . . . . LITERALLY 13 MSETATT. . . . . . LITERALLY 13 MSETCNS. . . . . . LITERALLY 338 13 MSETDMA. . . . . . LITERALLY 116 138 13 MSETPRIOR. . . . . LITERALLY 341 13 MSETUSR. . . . . . LITERALLY 317 0016H 2 MSGCNT . . . . . . WORD MEMBER(VOUTQ) 320 0016H 2 MSGCNT . . . . . . WORD MEMBER(VCMXQ) 307 0016H 2 MSGCNT . . . . . . WORD MEMBER(IQD) 319 0016H 2 MSGCNT . . . . . . WORD MEMBER(VINQ) 320 000EH 2 MSGLEN . . . . . . WORD MEMBER(VCMXQ) 319 000EH 2 MSGLEN . . . . . . WORD MEMBER(VINQ) 307 000EH 2 MSGLEN . . . . . . WORD MEMBER(IQD) 317 000EH 2 MSGLEN . . . . . . WORD MEMBER(VOUTQ) 320 0018H 2 MSGOUT . . . . . . WORD MEMBER(VCMXQ) 319 0018H 2 MSGOUT . . . . . . WORD MEMBER(VINQ) 317 0018H 2 MSGOUT . . . . . . WORD MEMBER(VOUTQ) 307 0018H 2 MSGOUT . . . . . . WORD MEMBER(IQD) 36 0009H 1 MSOURCE. . . . . . BYTE MEMBER(CCB) 13 MSYSDAT. . . . . . LITERALLY 13 MWRITEF. . . . . . LITERALLY 13 MWRITEQ. . . . . . LITERALLY 70 13 MWRITERF . . . . . LITERALLY 121 15 MXCONIN. . . . . . LITERALLY 15 MXCONOUT . . . . . LITERALLY 265 15 MXLSTOUT . . . . . LITERALLY 267 15 MXSWITCH . . . . . LITERALLY 15 MXUPSTATUS . . . . LITERALLY 285 321 0008H 8 NAME . . . . . . . BYTE ARRAY(8) MEMBER(QPB) 308 319 0006H 8 NAME . . . . . . . BYTE ARRAY(8) MEMBER(VINQ) 332 PL/M-86 COMPILER VOUT.RSP - virtual console disk write 04/22/83 18:10:37 PAGE 19 317 0006H 8 NAME . . . . . . . BYTE ARRAY(8) MEMBER(VOUTQ) 334 307 0006H 8 NAME . . . . . . . BYTE ARRAY(8) MEMBER(IQD) 308 320 0006H 8 NAME . . . . . . . BYTE ARRAY(8) MEMBER(VCMXQ) 336 17 NAMELEN. . . . . . LITERALLY 332 334 336 34 0006H 1 NCCB . . . . . . . BYTE MEMBER(XINIT) 25 0049H 1 NCCB . . . . . . . BYTE MEMBER(SD) 36 0007H 1 NCHAR. . . . . . . BYTE MEMBER(CCB) 25 0085H 1 NCIODEV. . . . . . BYTE MEMBER(SD) 25 0047H 1 NCNS . . . . . . . BYTE MEMBER(SD) 25 0083H 1 NCONDEV. . . . . . BYTE MEMBER(SD) 21 0000H 1 NCOPIES. . . . . . BYTE EXTERNAL(2) 22 321 0001H 1 NET. . . . . . . . BYTE MEMBER(QPB) 320 0002H 1 NET. . . . . . . . BYTE MEMBER(VCMXQ) 319 0002H 1 NET. . . . . . . . BYTE MEMBER(VINQ) 317 0002H 1 NET. . . . . . . . BYTE MEMBER(VOUTQ) 307 0002H 1 NET. . . . . . . . BYTE MEMBER(IQD) 25 004AH 1 NFLAGS . . . . . . BYTE MEMBER(SD) 34 0007H 1 NLST . . . . . . . BYTE MEMBER(XINIT) 25 0048H 1 NLST . . . . . . . BYTE MEMBER(SD) 25 0084H 1 NLSTDEV. . . . . . BYTE MEMBER(SD) 321 0004H 2 NMSGS. . . . . . . WORD MEMBER(QPB) 320 0010H 2 NMSGS. . . . . . . WORD MEMBER(VCMXQ) 319 0010H 2 NMSGS. . . . . . . WORD MEMBER(VINQ) 317 0010H 2 NMSGS. . . . . . . WORD MEMBER(VOUTQ) 307 0010H 2 NMSGS. . . . . . . WORD MEMBER(IQD) 2 NO . . . . . . . . LITERALLY 2 NOPAGEMODEOFFSET . LITERALLY 320 0014H 2 NQ . . . . . . . . WORD MEMBER(VCMXQ) 319 0014H 2 NQ . . . . . . . . WORD MEMBER(VINQ) 317 0014H 2 NQ . . . . . . . . WORD MEMBER(VOUTQ) 307 0014H 2 NQ . . . . . . . . WORD MEMBER(IQD) 25 004EH 1 NSLAVES. . . . . . BYTE MEMBER(SD) 105 0016H 2 NUMPURGEBUFCHARS . WORD INITIAL 188 191 198 279 301 34 0005H 1 NVCNS. . . . . . . BYTE MEMBER(XINIT) 34 0000H 2 OFFSET . . . . . . WORD MEMBER(XINITPTR) 28 0000H 2 OFFSET . . . . . . WORD MEMBER(CCBPTR) 329 24 0000H 2 OFFSET . . . . . . WORD MEMBER(SYSDATPTR) 328 25 008BH 1 OPMAX. . . . . . . BYTE MEMBER(SD) 317 0003H 1 ORG. . . . . . . . BYTE MEMBER(VOUTQ) 320 0003H 1 ORG. . . . . . . . BYTE MEMBER(VCMXQ) 319 0003H 1 ORG. . . . . . . . BYTE MEMBER(VINQ) 307 0003H 1 ORG. . . . . . . . BYTE MEMBER(IQD) 52 0000H 2 P1 . . . . . . . . WORD PARAMETER 53 52 0000H 2 P2 . . . . . . . . WORD PARAMETER 53 2 PAGELENOFFSET. . . LITERALLY 36 000AH 1 PC . . . . . . . . BYTE MEMBER(CCB) 314 0000H 1 PD . . . . . . . . BYTE BASED(PDPOINTER) ARRAY(1) 331 315 PDNAME . . . . . . LITERALLY 331 313 001AH 4 PDPOINTER. . . . . POINTER 314 330 331 324 057AH 308 PLMSTART . . . . . PROCEDURE PUBLIC STACK=0018H 25 006EH 2 PLR. . . . . . . . WORD MEMBER(SD) 55 PSCIOSLEEP . . . . LITERALLY 58 25 005CH 2 PUL. . . . . . . . WORD MEMBER(SD) 245 03B2H 334 PURGE. . . . . . . PROCEDURE STACK=0014H 348 103 0108H 128 PURGEBUF . . . . . BYTE ARRAY(128) 138 196 218 244 PURGEOKMASK. . . . LITERALLY 250 253 104 0014H 2 PURGEPTR . . . . . WORD INITIAL 188 192 199 217 218 280 300 PL/M-86 COMPILER VOUT.RSP - virtual console disk write 04/22/83 18:10:37 PAGE 20 176 0285H 51 PUTCHAR. . . . . . PROCEDURE BYTE STACK=0010H 237 52 0000H PXIOS1 . . . . . . PROCEDURE EXTERNAL(7) STACK=0000H 265 267 285 321 0002H 2 QADDR. . . . . . . WORD MEMBER(QPB) 65 69 153 163 311 36 0020H 2 QBUFF. . . . . . . WORD MEMBER(CCB) 304 0004H 2 QDADDR . . . . . . WORD PARAMETER AUTOMATIC 305 307 308 309 4 QDSTRUCTURE. . . . LITERALLY 307 317 319 320 162 018BH 1 QEMPTY . . . . . . BYTE 165 166 169 172 11 QFDEV. . . . . . . LITERALLY 7 QFHIDE . . . . . . LITERALLY 317 319 320 6 QFKEEP . . . . . . LITERALLY 317 319 320 5 QFMX . . . . . . . LITERALLY 320 10 QFRPL. . . . . . . LITERALLY 8 QFRSP. . . . . . . LITERALLY 9 QFTABLE. . . . . . LITERALLY 25 0074H 2 QLR. . . . . . . . WORD MEMBER(SD) 25 0060H 8 QMAU . . . . . . . WORD ARRAY(4) MEMBER(SD) 3 QNAMSIZ. . . . . . LITERALLY 307 308 317 319 320 321 331 321 0072H 16 QPB. . . . . . . . STRUCTURE 65 66 69 70 153 154 155 163 164 167 308 310 311 36 001EH 2 QPBBUFFPTR . . . . WORD MEMBER(CCB) 36 0018H 1 QPBFLAGS . . . . . BYTE MEMBER(CCB) 36 001CH 2 QPBNMSGS . . . . . WORD MEMBER(CCB) 36 001AH 2 QPBQADDR . . . . . WORD MEMBER(CCB) 36 0019H 1 QPBRESRVD. . . . . BYTE MEMBER(CCB) 12 QPBSTRUCTURE . . . LITERALLY 321 36 0002H 2 QUEUE. . . . . . . WORD MEMBER(CCB) 25 005EH 2 QUL. . . . . . . . WORD MEMBER(SD) 36 0028H 2 R1 . . . . . . . . WORD MEMBER(CCB) 36 002AH 2 R2 . . . . . . . . WORD MEMBER(CCB) 128 0167H 125 READBUF. . . . . . PROCEDURE BYTE STACK=0008H 189 64 002AH 26 READCHANGEMXQ. . . PROCEDURE STACK=0008H 222 251 281 295 150 01E4H 53 READVOUTQ. . . . . PROCEDURE STACK=0008H 236 353 36 000DH 1 RESERVD. . . . . . BYTE MEMBER(CCB) 95 00C4H 28 RESETFILE. . . . . PROCEDURE STACK=0002H 133 146 298 34 0003H 2 RESRVD1. . . . . . BYTE ARRAY(2) MEMBER(XINIT) 306 0191H 1 RET. . . . . . . . BYTE 309 310 129 0188H 1 RET. . . . . . . . BYTE 143 147 25 0068H 2 RLR. . . . . . . . WORD MEMBER(SD) 78 000EH 2 RRR. . . . . . . . WORD INITIAL 98 112 141 142 144 145 19 0000H 2 RSPLINK. . . . . . WORD EXTERNAL(0) 327 25 0042H 2 RSPSEG . . . . . . WORD MEMBER(SD) 325 0082H 2 SAVESTATE. . . . . WORD 25 0000H 145 SD . . . . . . . . STRUCTURE BASED(SYSDATPOINTER) 88 329 339 26 0000H 1 SDBYTE . . . . . . BYTE BASED(SYSDATPOINTER) ARRAY(1) 2 SECTORLEN. . . . . LITERALLY 34 0002H 2 SEGMENT. . . . . . WORD MEMBER(XINITPTR) 28 0002H 2 SEGMENT. . . . . . WORD MEMBER(CCBPTR) 327 24 0002H 2 SEGMENT. . . . . . WORD MEMBER(SYSDATPTR) 327 SETB . . . . . . . BUILTIN 87 SIZE . . . . . . . BUILTIN 329 56 0000H 21 SLEEP. . . . . . . PROCEDURE STACK=000CH 257 25 0070H 2 SLR. . . . . . . . WORD MEMBER(SD) 25 0008H 56 SPACE. . . . . . . WORD ARRAY(28) MEMBER(SD) 25 004BH 1 SRCHDISK . . . . . BYTE MEMBER(SD) 36 0005H 1 STARTCOL . . . . . BYTE MEMBER(CCB) 36 000EH 2 STATE. . . . . . . WORD MEMBER(CCB) 223 224 235 250 252 253 263 282 284 296 345 347 349 PL/M-86 COMPILER VOUT.RSP - virtual console disk write 04/22/83 18:10:37 PAGE 21 25 0000H 8 SUPMOD . . . . . . WORD ARRAY(4) MEMBER(SD) 23 0000H 4 SYSDATPOINTER. . . POINTER 24 25 26 88 329 339 24 0000H 4 SYSDATPTR. . . . . STRUCTURE AT 327 328 25 008CH 4 SYSLTOT. . . . . . WORD ARRAY(2) MEMBER(SD) 2 TAB. . . . . . . . LITERALLY 25 0050H 1 TEMPDISK . . . . . BYTE MEMBER(SD) 88 339 25 0072H 2 THRDRT . . . . . . WORD MEMBER(SD) 34 0000H 1 TICK . . . . . . . BYTE MEMBER(XINIT) 25 0051H 1 TICKSPERSEC. . . . BYTE MEMBER(SD) 34 0001H 1 TICKSSEC . . . . . BYTE MEMBER(XINIT) 25 007EH 4 TOD. . . . . . . . WORD ARRAY(2) MEMBER(SD) 25 0082H 1 TOD_SEC. . . . . . BYTE MEMBER(SD) 2 TRUE . . . . . . . LITERALLY 75 76 77 84 93 96 117 126 157 169 174 179 184 205 215 219 249 342 39 0001H 1 TYPE . . . . . . . BYTE MEMBER(VOUTQMSG) 156 168 178 180 20 0000H 2 UDASEG . . . . . . WORD EXTERNAL(1) 36 0024H 2 USLEEP . . . . . . WORD MEMBER(CCB) 289 302 36 000BH 1 VC . . . . . . . . BYTE MEMBER(CCB) 320 0056H 28 VCMXQ. . . . . . . STRUCTURE INITIAL 336 337 36 0016H 2 VCMXQ. . . . . . . WORD MEMBER(CCB) 65 69 337 25 007AH 2 VERNUM . . . . . . WORD MEMBER(SD) 25 0078H 2 VERSION. . . . . . WORD MEMBER(SD) 319 003AH 28 VINQ . . . . . . . STRUCTURE INITIAL 332 333 36 0012H 2 VINQ . . . . . . . WORD MEMBER(CCB) 333 318 01B2H 64 VINQBUF. . . . . . BYTE ARRAY(64) 319 1 0000H VOUT . . . . . . . PROCEDURE STACK=0000H 317 001EH 28 VOUTQ. . . . . . . STRUCTURE INITIAL 334 335 36 0014H 2 VOUTQ. . . . . . . WORD MEMBER(CCB) 153 163 335 316 0192H 32 VOUTQBUF . . . . . BYTE ARRAY(32) 317 39 000CH 2 VOUTQMSG . . . . . STRUCTURE 154 156 164 168 171 178 180 181 204 36 0026H 2 VSLEEP . . . . . . WORD MEMBER(CCB) 38 WAKEMSG. . . . . . LITERALLY 180 60 0015H 21 WAKEUP . . . . . . PROCEDURE STACK=000CH 273 289 302 106 00E0H 135 WRITEBUF . . . . . PROCEDURE BYTE STACK=000CH 183 230 68 0044H 26 WRITECHANGEMXQ . . PROCEDURE STACK=0008H 225 272 275 287 297 340 227 018CH 1 WRITEPENDING . . . BYTE INITIAL 197 229 230 237 299 74 0084H 1 WRITING. . . . . . BYTE INITIAL 97 114 117 136 139 79 0010H 2 WRR. . . . . . . . WORD INITIAL 98 112 119 120 125 145 34 0000H 12 XINIT. . . . . . . STRUCTURE BASED(XINITPOINTER) 34 XINITOFFSET. . . . LITERALLY 34 0008H 4 XINITPOINTER . . . POINTER 34 34 0008H 4 XINITPTR . . . . . STRUCTURE AT MODULE INFORMATION: CODE AREA SIZE = 06AEH 1710D CONSTANT AREA SIZE = 0001H 1D VARIABLE AREA SIZE = 0216H 534D MAXIMUM STACK SIZE = 0018H 24D 777 LINES READ 0 PROGRAM WARNINGS 0 PROGRAM ERRORS END OF PL/M-86 COMPILATION