! Segment 7 I/O layout included %end %of %list ! Layout of segment 7: ALL I/O status variables live here. ! Hence any process calling MAP VIRT (this id, 7, 7) can pick ! up entire state of this process' I/O. ! See e.g. new IMP-77 compiler control process. Each pass maps its ! Seg 7 onto that of control process, and control proc. performs ! all opening/closing of files instead of individual passes. Hence ! less code is required to support each pass, easing shoe-horning ! problems! ! !********************************************************************* !* !* B E W A R E !* !* The constintegernames defined below point to things in segment 7. !* Any changes to seg7 format which move items defined here will require !* to the addresses of these items to be changed. !* !* The reason for doing this is because of limitations in the embedded !* assembler, which does not permit constructs such as !* *mov_s7_trap_pc,-(sp) !* %constintegername s7trap == 8_160234 %constintegername s7trpc == 8_160226 %record %format pf(%byte %integer ser, reply, %integer a, b, c) %recordformat trapf((%integer r0,r1,r2,r3,r4,r5,pc,psw,stack,trap) %c %or(%integerarray regs(0:9))) %record %format seg7fm ( %c %string(255)%name param str, { ->string param from parent via loader } %integer load flag, { Type of load: generally ignored? } %byte unit, fsys, { Current disk + file system number } callid, strm0id, { Parent task, SER of TTY for this task } id, { Real identity of this task } param set, { flag for handling of CLI-Param } %integer gvar, { Var for GOT SYM - makes it go faster } %record(sdfm) %name inx, outx, { -> current stream descriptors } %string(31) prompt, { Current prompt string } %byte int char, dummy2, { Last int. Offset=8_60 *CRITICAL* } %integer instrmx, outstrmx, { Current stream numbers } %record(pf) p, { For all I/O Package message passing } %byte %array param space (8_76:8_211), { Covers 8_112:8_237 *CRITICAL* } %record(trapf) trap, { Task registers on trap which has been signalled} %integer unused, %record(event fm) event, { Process event record 8_240 *CRITICAL* } %integer io close rt, { Address of I/O closedown routine } %record(sdfm) %name %array %c in strm (0:max streams), { -> corresponding stream descs } out strm (0:max streams), { " " " " " " " " " } %record(sdfm) ttin, ttout, { TTY I/O stream descriptors } %byte %array tt in buff (0:127), { TTY I/O buffers } tt out buff (0:127), %record(sbfm)%arrayname sb, { (Desc+buffer)s for file streams } %integer dev lim, { No of devices } %integerarray dev name(0:max devs), { Device names } %bytearray dev ser (0:max devs), { Service numbers } %integer unit lim, { No of units } %integerarray unit no (0:max devs), { Disc unit numbers } %bytearray unit ser (0:max units), {service numbers for thses units} %integerarray display(0:8), { Display for everyone (or maybe only PERM) } %integer event base, %c %integer code base, %c %integer stack base, %c %integer glabase,glap,initsp,ioarea,iotop,nstreams, %record(sbfm) %array %c sba (1:max streams*2) { (Desc+buffer)s for file streams } %c ) ! Mapped onto virtual store by... %const %record(seg7fm) %name S7 == 8_160000 ! The following are aliases which are also included in ! the prim-definitions file - they MUST line up with ! usage as defined in the SEG7 record above.. %const %record(event fm) %name event == 8_160240 %const %byte %integer %name int char == 8_160060 %list %end %of %file