Digital Research
This commit is contained in:
2020-11-06 18:50:37 +01:00
parent 621ed8ccaf
commit 31738079c4
8481 changed files with 1888323 additions and 0 deletions

View File

@@ -0,0 +1,7 @@
VCMODE status: working 1/28/83
VCMODE notes
1/31/83 Changed the version check to ignore BDOS and just look for O.S.2.0.
Changed error messages (ambiguous,etc.). FMB.
11/4/82 I got the latest version from Danny, I'll compile and see if it works.
10/22/82 This one needs the new XIOS...

View File

@@ -0,0 +1,16 @@
$ !
$ ! Compile, link, locate and generate hex for
$ ! 'VCMODE'
$ ! Concurrent CP/M-86
$ !
$ util := VCMODE
$ ccpmsetup ! set up environment
$ assign 'f$directory()' f1:
$ plm86 'util'.plm xref 'p1' optimize(3) debug
$ link86 f2:scd.obj, 'util'.obj to 'util'.lnk
$ loc86 'util'.lnk od(sm(code,dats,data,stack,const)) -
ad(sm(code(0),dats(10000h))) ss(stack(+32)) to 'util'.
$ h86 'util'
$ !
$ !pclean

View File

@@ -0,0 +1,194 @@
:020000021000EC
:0100040000FB
:020000021000EC
:020006000000F8
:020000021005E7
:0700000000000000000000F9
:020000021007E5
:04000C0000000000F0
:020000021010DC
:080000000000000000000000F8
:020000020000FC
:10000000EB4B90EB7690434F505952494748542060
:1000100028432920313938332C2044494749544159
:100020004C2052455345415243482020434F4E43B4
:10003000555252454E542043502F4D2D38362032C4
:100040002E302C2030332F33312F3833209C58FA68
:100050008CD98ED18D267801509DE9FB03558BEC10
:100060008B56048B4E06CDE0A30001891E02018948
:0F0070000E0401891606015DC204009090909065
:020000020010EC
:020000000010EE
:020000021017D5
:100008000D0A09090956434D4F4445204558414DAD
:05001800504C4553248B
:020000021018D4
:10000D000D0A0A76636D6F6465090909090928737C
:10001D00686F77206261636B67726F756E64206DB8
:05002D006F6465292449
:02000002101BD1
:100002000D0A76636D6F64652064796E616D696354
:10001200090909092873657473206261636B677249
:0B0022006F756E64206D6F646529240B
:02000002101DCF
:10000D000D0A76636D6F646520627566666572654F
:08001D00640909090909222404
:02000002101FCD
:100005000D0A76636D6F64652073697A65203D20FE
:100015003509090909287365747320627566666573
:10002500726564206D6F6465206D61782066696C0A
:0B003500652073697A6520696E29243C
:020000021023C9
:100000000D0A0909090909286B696C6F6279746521
:10001000732C206C6567616C2072616E6765206966
:0D00200073203120746F20383139312924CC
:020000021025C7
:10000D000D0A090909090928616C736F207365745C
:10001D0073206261636B67726F756E64206D6F64C0
:0F002D006520746F2062756666657265642924AC
:020000021028C4
:10000C000D0A76636D6F64652068656C700909096B
:10001C0009287072696E74732074686973206D6539
:07002C00737361676529246D
:02000002102BC1
:030003000D0A24BF
:02000002102BC1
:100006000D0A4261636B67726F756E64204D6F6493
:100016006520466F72205669727475616C20436F55
:060026006E736F6C65248F
:02000002102DBF
:09000C002044796E616D696324E2
:02000002102EBE
:100005002042756666657265640D0A4D6178696D95
:10001500756D2066696C652073697A65203D2024BD
:020000021030BC
:020005004B248A
:020000021030BC
:030007000D0A24BB
:020000021030BC
:10000A000D0A496E76616C696420436F6D6D616E8D
:0C001A0064204F7074696F6E2E0D0A2474
:020000021012DA
:02000C000000F2
:020000021032BA
:100006000D0A526571756972657320436F6E63756B
:100016007272656E742043502F4D2D38360D0A24AA
:020000021034B8
:100006000D0A5669727475616C20436F6E736F6C5E
:1000160065206E6F7420696E20666F726567726FF9
:06002600756E640D0A2452
:020000021036B6
:03000C00697324F1
:020000021036B6
:08000F004255464645524544A6
:020000021037B5
:0700070044594E414D4943ED
:020000021037B5
:04000E0048454C50C5
:020000021038B4
:0400020053495A45BF
:020000021038B4
:100006000D0A46696C652073697A65206F757420E0
:0B0016006F662072616E67650D0A24A2
:02000002103AB2
:100001000D0A496E76616C696420436F6D6D616E96
:0C00110064204F7074696F6E2E0D0A247D
:02000002103BB1
:07000D0073657420746F2479
:020000020010EC
:10000200558BECB002508A4604B40050E84CFF5DB8
:03001200C2020027
:020000020011EB
:10000500558BECB00950FF7604E83CFF5DC2020059
:020000020012EA
:0F000500558BECB00C50B8000050E82BFF5DC3DA
:020000020013E9
:0F000400558BECB08F50B8000050E81CFF5DC367
:020000020014E8
:0F000300558BECB09950B8000050E80DFF5DC36D
:020000020015E7
:0B000200558BECB02050E8A7FF5DC359
:020000020015E7
:10000D00558BEC8B460609C0744889C18B46083167
:10001D00D2F7F1A230018B460831D2F7F18956089B
:10002D0089C8BB0A0031D2F7F389460609C074139B
:10003D00823E300100750C8A4604D0D87305E8B4B1
:10004D00FFEBC0C6460400A03001043050E855FF58
:06005D00EBB15DC20600DC
:02000002001BE1
:10000300558BECB00950B8780150E89DFEB009500B
:10001300B88D0150E893FEB00950B8B20150E88999
:10002300FEB00950B8DD0150E87FFEB00950B8F5C5
:100033000150E875FEB00950B8300250E86BFEB0CD
:100043000950B85D0250E861FEB00950B88C025007
:10005300E857FEB00950B8B30250E84DFEE821FF5F
:020063005DC37B
:020000020021DB
:10000500558BECB00950B8B60250E83BFEA0340160
:10001500B40050B8640050B0FF50E82BFFE81DFF56
:10002500B00950FF7604E81FFEC41E0C01268B475D
:100035000E250100A314017508B00950B8DC02EBC8
:1000450022B00950B8E50250E8FDFDC41E0C01269A
:10005500FF7710B8102750B0FF50E8EBFEB00950FD
:10006500B8050350E8E1FDB00950B8070350E8D7DB
:05007500FD5DC2020068
:020000020028D4
:10000A00558BECC41E0C01268B4716A31801B08928
:0A001A0050B8160150E8BBFD5DC3AD
:02000002002AD2
:10000400558BECC41E0C01268B4716A31801B08B2C
:0A00140050B8160150E8A1FD5DC3CD
:02000002002BD1
:10000E00558BEC807E0430720C807E04397706802E
:10001E006E0430EB188A46043C41720D3C4677095B
:10002E002C41040A884604EB04C64604FF8A4604A3
:04003E005DC202009D
:02000002002FCD
:10000200558BEC807E0430720C807E04397706803A
:100012006E0430EB04C64604FF8A46045DC2020049
:020000020031CB
:10000200558BECC606320100C70626010000C47EED
:1000120004B048B90500FC8BD1E306F2AE75F82BAB
:10002200D14A8816330183FAFF7447A03201B40023
:1000320089C6C45E0426FF30E871FFA231013CFF8D
:10004200B0FF7501408A0E3201503A0E3301B0FF03
:100052007201405922C1D0D87367A12601B104D3DD
:10006200E08A0E3101B50003C1A32601FE0632016A
:10007200EBB9A03201B40089C6C45E0426FF30E8A1
:100082005EFFA231013CFFB0FF75014050803E325D
:100092000105B0FF7201405922C1D0D87323A126B5
:1000A20001B90A00F7E18A0E3101B50003C1A326A6
:1000B20001803E3201047503A32801FE063201EBE2
:1000C200B1A128013B0626017606C7062601FFFFDD
:0700D200A126015DC204003C
:02000002003EBE
:10000900558BECC4760C06C47E088A4E04B5005A9A
:100019001E8EDAFC8BD1E306F3A674F82BD14A1FA6
:1000290089162A0183FAFF742289D6C45E0C2680B8
:100039003820B0FF7401408A4E06B500503BD1B05C
:10004900FF7301405922C1D0D87304B0FFEB1CC41F
:100059005E0C8B362A0126803820750DB00950B800
:0F0069000A0350E80EFCE861FDB0005DC20C0018
:020000020045B7
:10000800558BECE8C7FCA32C01A12C0188E03C141B
:100018007410B8260350E8A4FCB000B4005050E8AF
:10002800E3FBB09A50B8000050E8D9FB891E0801DC
:100038008C060A01891E0C018C060E01B09950B875
:10004800000050E8BFFBA23401B400B92C00F7E16E
:10005800C41E080126034754A30C01E8D4FDC41E9E
:100068000C0126F7470E0200740DB00950B846037C
:1000780050E891FBE9D400823E8000007506B86C18
:1000880003E9C300C6066500208D065D001E508D7D
:10009800066F031E50B00150B00850E8F3FED0D8E8
:1000A800730CC41E0C0126814F0E0100EB238D0634
:1000B8005D001E508D0677031E50B00150B00750EA
:1000C800E8CEFED0D8730CC41E0C012681670EFE44
:1000D800FFEB718D065D001E508D067E031E50B02D
:1000E8000150B00450E8A9FED0D872558D065D00C5
:1000F8001E508D0682031E50B00150B00450E89087
:10010800FED0D873328D066D001E50E8ACFDA32ECC
:1001180001A12E0109C0740F3D0020730AC41E0CF2
:100128000126894710EB0DB00950B8860350E8D472
:10013800FAE827FCE96BFFB00950B8A10350E8C4FE
:10014800FAE817FCB8BD0350E872FCE88EFB5DC303
:00000001FF

View File

@@ -0,0 +1,951 @@
PL/M-86 COMPILER VCMODE.CMD - SET VIRTUAL CONSOLE BACKGROUND MODE PAGE 1
ISIS-II PL/M-86 V2.0 COMPILATION OF MODULE VCMODE
OBJECT MODULE PLACED IN VCMODE.OBJ
COMPILER INVOKED BY: :F0: VCMODE.PLM XREF OPTIMIZE(3) DEBUG
$title('VCMODE.CMD - Set Virtual Console Background Mode')
$compact
1 vcmode:
do;
$include (:f2:copyrt.lit)
=
= /*
= Copyright (C) 1983
= Digital Research
= P.O. Box 579
= Pacific Grove, CA 93950
= */
=
$include (:f2:vaxcmd.lit)
=
= /**** VAX commands for generation - read the name of this program
= for PROGNAME below.
=
= $ util := PROGNAME
= $ ccpmsetup ! set up environment
= $ assign 'f$directory()' f1: ! use local dir for temp files
= $ plm86 'util'.plm xref 'p1' optimize(3) debug
= $ link86 f2:scd.obj, 'util'.obj to 'util'.lnk
= $ loc86 'util'.lnk od(sm(code,dats,data,stack,const)) -
= ad(sm(code(0),dats(10000h))) ss(stack(+32)) to 'util'.
= $ h86 'util'
=
= ***** Then, on a micro:
= A>vax progname.h86 $fans
= A>gencmd progname data[b1000]
=
= ***** Notes: Stack is increased for interrupts. Const(ants) are last
= to force hex generation.
= ****/
$include (:f2: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',
= ctrlc lit '3',
= ff lit '12',
= page$len$offset lit '1ch',
PL/M-86 COMPILER VCMODE.CMD - SET VIRTUAL CONSOLE BACKGROUND MODE PAGE 2
= nopage$mode$offset lit '2Ch',
= sectorlen lit '128';
$include (:f2:mfunc.lit)
=
= /* Concurrent CP/M function numbers */
=
3 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',
= 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 */
=
4 1 = dcl mi$sleep lit '0212H',
= mi$wakeup lit '0213H';
=
$include (:f2:fcb.lit)
=
5 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 */
= f$rw lit '9', /* high bit is R/W attribute */
PL/M-86 COMPILER VCMODE.CMD - SET VIRTUAL CONSOLE BACKGROUND MODE PAGE 3
= 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 */
=
6 1 dcl fcb (1) byte external;
7 1 dcl buff (1) byte external;
$include (:f2:sd.lit)
=
= /* System Data Page */
=
8 1 = dcl sysdat$pointer pointer;
9 1 = dcl sysdat$ptr structure(
= offset word,
= segment word) at (@sysdat$pointer);
10 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,
= tickspersec byte,
= lul word,
= ccb word,
= flags word,
= mdul word,
= mfl word,
= pul word,
= qul word,
PL/M-86 COMPILER VCMODE.CMD - SET VIRTUAL CONSOLE BACKGROUND MODE PAGE 4
= 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 );
=
=
11 1 = declare sd$byte based sysdat$pointer (1) byte;
=
12 1 dcl ccb$pointer pointer;
13 1 dcl ccb$ptr structure ( offset address, segment address) at
(@ccb$pointer);
$include (:f2: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 ... |
= +---------+---------+---------+---------+
=
PL/M-86 COMPILER VCMODE.CMD - SET VIRTUAL CONSOLE BACKGROUND MODE PAGE 5
=
=
=
= */
=
14 1 = dcl ccb$structure lit 'structure (attach address, queue address,
= flag byte, startcol byte, column byte, nchar byte, mimic byte, msource byte,
= ccb$tail1';
15 1 = dcl ccb$tail1 lit
= 'pc byte, vc byte, btmp byte, reservd byte, state word, maxbufsiz word,
= ccb$tail2';
16 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)';
=
17 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 */
=
18 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';
=
19 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);
=
=
20 1 = dcl lcb$structure lit 'structure (attach address, queue address,
= flag byte, startcol byte, column byte, nchar byte,
= mimic byte, msource byte)';
=
21 1 dcl ccb based ccb$pointer ccb$structure;
PL/M-86 COMPILER VCMODE.CMD - SET VIRTUAL CONSOLE BACKGROUND MODE PAGE 6
22 1 dcl ccpmproduct lit '14h';
23 1 dcl bdosversion lit '31h';
24 1 mon1: procedure (func,info) external;
25 2 declare func byte;
26 2 declare info address;
27 2 end mon1;
28 1 mon2: procedure (func,info) byte external;
29 2 declare func byte;
30 2 declare info address;
31 2 end mon2;
32 1 mon3: procedure (func,info) address external;
33 2 dcl func byte, info address;
34 2 end mon3;
35 1 mon4: procedure (func,info) pointer external;
36 2 dcl func byte, info address;
37 2 end mon4;
/**************************************
* *
* B D O S Externals *
* *
**************************************/
38 1 print$char: procedure(char);
39 2 declare char byte;
40 2 call mon1(2,char);
41 2 end print$char;
42 1 print$console$buffer: procedure (buffer$address);
43 2 declare buffer$address address;
44 2 call mon1 (9,buffer$address);
45 2 end print$console$buffer;
46 1 version: procedure address;
47 2 return mon3(12,0);
48 2 end version;
/**************************************
* *
* X D O S Externals *
* *
**************************************/
49 1 terminate: procedure;
50 2 call mon1 (143,0);
51 2 end terminate;
52 1 get$console$number: procedure byte;
53 2 return mon2 (153,0);
54 2 end get$console$number;
PL/M-86 COMPILER VCMODE.CMD - SET VIRTUAL CONSOLE BACKGROUND MODE PAGE 7
55 1 printb: procedure public;
56 2 call print$char(' ');
57 2 end printb;
58 1 pdecimal: procedure(v,prec,zerosup) public;
/* print value v, field size = (log10 prec) + 1 */
/* with leading zero suppression if zerosup = true */
59 2 declare v address, /* value to print */
prec address, /* precision */
zerosup boolean, /* zero suppression flag */
d byte; /* current decimal digit */
60 2 do while prec <> 0;
61 3 d = v / prec; /* get next digit */
62 3 v = v mod prec; /* get remainder back to v */
63 3 prec = prec / 10; /* ready for next digit */
64 3 if prec <> 0 and zerosup and d = 0 then
65 3 call printb;
else
66 3 do;
67 4 zerosup = false;
68 4 call printchar('0'+d);
69 4 end;
70 3 end;
71 2 end pdecimal;
/*lbracket: procedure byte; /* find left bracket in command tail return */
/* dcl i byte; /* its index. if not found ret 0 */
/* i = 1;
do while i <= buff(0) and (buff(i) = ' ' or buff(i) = tab);
i = i + 1;
end;
if buff(i) = '[' then
return(i);
return(0);
end lbracket;
*/
72 1 help: procedure;
73 2 call mon1(m$prt$buf, .(cr, lf, tab, tab, tab ,'VCMODE EXAMPLES$'));
74 2 call mon1(m$prt$buf, .(cr, lf, lf, 'vcmode', tab, tab, tab, tab, tab,
'(show background mode)$'));
75 2 call mon1(m$prt$buf, .(cr, lf, 'vcmode dynamic', tab, tab, tab, tab,
'(sets background mode)$'));
76 2 call mon1(m$prt$buf, .(cr, lf, 'vcmode buffered', tab, tab, tab, tab,
tab, '"$'));
/* call mon1(m$prt$buf, .(cr, lf, 'vcmode suspend', tab, tab, tab, tab,
tab, '"$'));*/
77 2 call mon1(m$prt$buf, .(cr, lf, 'vcmode size = 5', tab, tab, tab, tab,
'(sets buffered mode max file size in)$'));
78 2 call mon1(m$prt$buf, .(cr, lf, tab, tab, tab, tab, tab,
'(kilobytes, legal range is 1 to 8191)$'));
79 2 call mon1(m$prt$buf, .(cr, lf, tab, tab, tab, tab, tab,
'(also sets background mode to buffered)$'));
/* call mon1(m$prt$buf, .(cr, lf, 'vcmode size = 100H', tab, tab, tab,
'(legal range in HEX is 1H to 1FFFFH)$'));*/
80 2 call mon1(m$prt$buf, .(cr, lf, 'vcmode help', tab, tab, tab, tab,
PL/M-86 COMPILER VCMODE.CMD - SET VIRTUAL CONSOLE BACKGROUND MODE PAGE 8
'(prints this message)$'));
81 2 call mon1(m$prt$buf, .(cr, lf, '$'));
82 2 call terminate;
83 2 end help;
84 1 showstate: procedure (verb);
85 2 dcl (verb,state) address;
86 2 call mon1(m$prt$buf, .(cr,lf,'Background Mode For Virtual Console$'));
87 2 call pdecimal (console, 100, true);
88 2 call printb;
89 2 call mon1(m$prt$buf, verb);
90 2 state = ccb.state and csm$buffered;
91 2 if state = 0 then
92 2 call mon1(m$prt$buf, .(' Dynamic$'));
else
93 2 do;
94 3 call mon1(m$prt$buf, .(' Buffered', cr, lf, 'Maximum file size = $'));
95 3 call pdecimal(ccb.maxbufsiz, 10000, true);
96 3 call mon1(m$prt$buf, .('K$'));
97 3 end;
98 2 call mon1(m$prt$buf, .(cr, lf, '$'));
99 2 end show$state;
$include (:f2:qd.lit)
=
= /* Queue Descriptor */
=
100 1 = dcl qnamsiz lit '8';
=
101 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 */
=
102 1 = dcl qf$mx lit '001h'; /* Mutual Exclusion */
103 1 = dcl qf$keep lit '002h'; /* NO DELETE */
104 1 = dcl qf$hide lit '004h'; /* Not User writable */
105 1 = dcl qf$rsp lit '008h'; /* rsp queue */
106 1 = dcl qf$table lit '010h'; /* from qd table */
107 1 = dcl qf$rpl lit '020h'; /* rpl queue */
108 1 = dcl qf$dev lit '040h'; /* device queue */
=
= /* Queue Parameter Block */
=
109 1 = dcl qpb$structure lit 'structure(
PL/M-86 COMPILER VCMODE.CMD - SET VIRTUAL CONSOLE BACKGROUND MODE PAGE 9
= flgs byte,
= net byte,
= qaddr word,
= nmsgs word,
= buffptr word,
= name (qnamsiz) byte )';
=
110 1 dcl qpb qpb$structure;
111 1 read$change$mxq: procedure;
112 2 qpb.qaddr = ccb.vcmxq;
113 2 call mon1 (m$readq, .qpb);
114 2 end read$change$mxq;
115 1 write$change$mxq: procedure;
116 2 qpb.qaddr = ccb.vcmxq;
117 2 call mon1 (m$writeq, .qpb);
118 2 end write$change$mxq;
119 1 atohb: procedure (char) byte public; /* convert ascii hex to nibble value */
120 2 declare char byte;
121 2 if char >= '0' and char <= '9' then
122 2 char = char - '0';
123 2 else if char >= 'A' and char <= 'F' then
124 2 char = char - 'A' + 10;
else
125 2 char = 255;
126 2 return(char);
127 2 end atohb;
128 1 atodb: procedure (char) byte public;/* convert ascii decimal to nibble value */
129 2 declare char byte;
130 2 if char >= '0' and char <= '9' then
131 2 char = char - '0';
else
132 2 char = 255;
133 2 return(char);
134 2 end atodb;
135 1 atoi: procedure(str) word; /* convert ascii to 16 bit unsigned value */
136 2 dcl str pointer;
137 2 dcl (accum, temp) word;
138 2 dcl (val, i, len) byte;
139 2 dcl string based str (1) byte;
140 2 i, accum = 0;
141 2 if (len := findb(str, 'H', 5)) <> 0ffffh then /* hex conversion */
142 2 do while (val := atohb(string(i))) <> 0ffh and i < len;
143 3 accum = shl(accum, 4) + val;
144 3 i = i + 1;
145 3 end;
else /* decimal is default base */
146 2 do while (val := atodb(string(i))) <> 0ffh and i < 5;
147 3 accum = 10 * accum + val;
148 3 if i = 4 then
149 3 temp = accum;
150 3 i = i + 1;
PL/M-86 COMPILER VCMODE.CMD - SET VIRTUAL CONSOLE BACKGROUND MODE PAGE 10
151 3 end;
152 2 if temp > accum then /* overflow */
153 2 accum = 0ffffh;
154 2 return(accum);
155 2 end atoi;
156 1 compare: procedure(ustr, ostr, minlen, maxlen) boolean;
157 2 dcl (ustr, ostr) pointer; /* user string, option string */
158 2 dcl user$string based ustr (1) byte;
159 2 dcl (minlen, maxlen) byte;
160 2 dcl cmplen word;
161 2 cmplen = cmpb(ustr, ostr, maxlen);
162 2 if cmplen = 0ffffh or (user$string(cmplen) = ' ' and cmplen >= minlen) then
163 2 return(true);
164 2 if user$string(cmplen) = ' ' then
165 2 do;
166 3 call mon1(m$prt$buf, .(cr,lf,'Invalid Command Option.', cr ,lf, '$'));
167 3 call help;
168 3 end;
169 2 return(false);
170 2 end compare;
171 1 dcl vers address initial (0);
172 1 dcl no$state lit '0ffh';
173 1 dcl console byte;
/*
Main Program
*/
174 1 plmstart: procedure public;
175 2 dcl option$ptr byte;
176 2 dcl num word;
177 2 vers = version;
178 2 if (high(vers) <> ccpmproduct) then
179 2 do;
180 3 call print$console$buffer(.(cr,lf,'Requires Concurrent CP/M-86', cr, lf,
'$'));
181 3 call mon1(0,0);
182 3 end;
183 2 sysdat$pointer, ccb$pointer = mon4(m$sysdat, 0); /* system data segment */
184 2 ccb$ptr.offset = sd.ccb + (console := mon2(m$getcns, 0)) * size(ccb);
185 2 call read$change$mxq; /* MXQ is written in kernel terminate code */
186 2 if (ccb.state and csm$background) <> 0 then
187 2 call mon1(m$prt$buf, .(cr,lf,'Virtual Console not in foreground', cr, lf,
'$'));
188 2 else if buff(0) = 0 then
189 2 call show$state(.('is$')); /* show current state */
else /* try to set state or show help message */
190 2 do;
191 3 fcb(f$type) = ' ';
192 3 if compare(@fcb(f$name), @('BUFFERED'), 1, 8) then
193 3 ccb.state = ccb.state or csm$buffered;
194 3 else if compare(@fcb(f$name), @('DYNAMIC'), 1, 7) then
195 3 ccb.state = ccb.state and not double(csm$buffered);
PL/M-86 COMPILER VCMODE.CMD - SET VIRTUAL CONSOLE BACKGROUND MODE PAGE 11
196 3 else if compare(@fcb(f$name), @('HELP'), 1, 4) then
197 3 call help;
198 3 else if compare(@fcb(f$name), @('SIZE'), 1, 4) then /* change to 2,4 */
199 3 do; /* when suspend is put back in */
200 4 num = atoi(@fcb(f$name2));
201 4 if num > 0 and num < 2000H then
202 4 ccb.maxbufsiz = num; /* limit size to 16 bit record count */
else
203 4 do;
204 5 call mon1(m$prt$buf, .(cr,lf,'File size out of range', cr ,lf, '$'));
205 5 call help;
206 5 end;
207 4 ccb.state = ccb.state or csm$buffered;
/* automatically sets to buffered */
208 4 end;
else
209 3 do;
210 4 call mon1(m$prt$buf, .(cr,lf,'Invalid Command Option.', cr ,lf, '$'));
211 4 call help;
212 4 end;
213 3 call show$state(.('set to$'));
214 3 end;
215 2 call terminate;
216 2 end plmstart;
217 1 end vcmode;
PL/M-86 COMPILER VCMODE.CMD - SET VIRTUAL CONSOLE BACKGROUND MODE PAGE 12
CROSS-REFERENCE LISTING
-----------------------
DEFN ADDR SIZE NAME, ATTRIBUTES, AND REFERENCES
----- ------ ----- --------------------------------
137 001EH 2 ACCUM. . . . . . . WORD 140 143 147 149 152 153 154
128 01F2H 32 ATODB. . . . . . . PROCEDURE BYTE PUBLIC STACK=0004H 146
119 01BEH 52 ATOHB. . . . . . . PROCEDURE BYTE PUBLIC STACK=0004H 142
135 0212H 215 ATOI . . . . . . . PROCEDURE WORD STACK=000CH 200
21 0000H 2 ATTACH . . . . . . WORD MEMBER(CCB)
23 BDOSVERSION. . . . LITERALLY
2 BOOLEAN. . . . . . LITERALLY 59 156
21 000CH 1 BTMP . . . . . . . BYTE MEMBER(CCB)
7 0000H 1 BUFF . . . . . . . BYTE ARRAY(1) EXTERNAL(1) 188
42 0004H 2 BUFFERADDRESS. . . WORD PARAMETER AUTOMATIC 43 44
110 0006H 2 BUFFPTR. . . . . . WORD MEMBER(QPB)
10 0054H 2 CCB. . . . . . . . WORD MEMBER(SD) 184
21 0000H 44 CCB. . . . . . . . STRUCTURE BASED(CCBPOINTER) 90 95 112 116 184 186 193
195 202 207
19 0008H 2 CCB. . . . . . . . WORD MEMBER(XINIT)
12 0004H 4 CCBPOINTER . . . . POINTER 13 21 90 95 112 116 183 186 193 195 202
207
13 0004H 4 CCBPTR . . . . . . STRUCTURE AT 184
14 CCBSTRUCTURE . . . LITERALLY 21
15 CCBTAIL1 . . . . . LITERALLY 21
16 CCBTAIL2 . . . . . LITERALLY 21
22 CCPMPRODUCT. . . . LITERALLY 178
17 CFBUFP . . . . . . LITERALLY
17 CFCOMPC. . . . . . LITERALLY
17 CFCONOUT . . . . . LITERALLY
17 CFLISTCP . . . . . LITERALLY
17 CFSWITCHS. . . . . LITERALLY
17 CFVOUT . . . . . . LITERALLY
119 0004H 1 CHAR . . . . . . . BYTE PARAMETER AUTOMATIC 120 121 122 123 124 125 126
38 0004H 1 CHAR . . . . . . . BYTE PARAMETER AUTOMATIC 39 40
128 0004H 1 CHAR . . . . . . . BYTE PARAMETER AUTOMATIC 129 130 131 132 133
10 0090H 1 CMOD . . . . . . . BYTE MEMBER(SD)
CMPB . . . . . . . BUILTIN 161
160 0022H 2 CMPLEN . . . . . . WORD 161 162 164
21 0006H 1 COLUMN . . . . . . BYTE MEMBER(CCB)
156 02E9H 111 COMPARE. . . . . . PROCEDURE BYTE STACK=001CH 192 194 196 198
173 002CH 1 CONSOLE. . . . . . BYTE 87 184
21 0022H 2 COSLEEP. . . . . . WORD MEMBER(CCB)
2 CR . . . . . . . . LITERALLY 73 74 75 76 77 78 79 80 81 86 94
98 166 180 187 204 210
18 CSMABORT . . . . . LITERALLY
18 CSMBACKGROUND. . . LITERALLY 186
18 CSMBUFFERED. . . . LITERALLY 90 193 195 207
18 CSMCTRLO . . . . . LITERALLY
18 CSMCTRLP . . . . . LITERALLY
18 CSMCTRLS . . . . . LITERALLY
18 CSMFILEFULL. . . . LITERALLY
18 CSMNOSWITCH. . . . LITERALLY
18 CSMPURGING . . . . LITERALLY
PL/M-86 COMPILER VCMODE.CMD - SET VIRTUAL CONSOLE BACKGROUND MODE PAGE 13
18 CSMSUSPEND . . . . LITERALLY
2 CTRLC. . . . . . . LITERALLY
59 0028H 1 D. . . . . . . . . BYTE 61 64 68
10 004FH 1 DAYFILE. . . . . . BYTE MEMBER(SD)
2 DCL. . . . . . . . LITERALLY
5 DISKMAPLEN . . . . LITERALLY
10 006AH 2 DLR. . . . . . . . WORD MEMBER(SD)
19 0002H 1 DOOR . . . . . . . BYTE MEMBER(XINIT)
DOUBLE . . . . . . BUILTIN 195
10 006CH 2 DRL. . . . . . . . WORD MEMBER(SD)
10 0044H 2 ENDSEG . . . . . . WORD MEMBER(SD)
2 FALSE. . . . . . . LITERALLY 67 169
5 FARC . . . . . . . LITERALLY
6 0000H 1 FCB. . . . . . . . BYTE ARRAY(1) EXTERNAL(0) 191 192 194 196 198 200
5 FCR. . . . . . . . LITERALLY
5 FDIRSYS. . . . . . LITERALLY
5 FDISKMAP . . . . . LITERALLY
5 FDRVUSR. . . . . . LITERALLY
5 FDRVUSR2 . . . . . LITERALLY
5 FEX. . . . . . . . LITERALLY
2 FF . . . . . . . . LITERALLY
FINDB. . . . . . . BUILTIN 141
21 0004H 1 FLAG . . . . . . . BYTE MEMBER(CCB)
10 0056H 2 FLAGS. . . . . . . WORD MEMBER(SD)
110 0000H 1 FLGS . . . . . . . BYTE MEMBER(QPB)
5 FNAME. . . . . . . LITERALLY 192 194 196 198
5 FNAME2 . . . . . . LITERALLY 200
5 FNAMELEN . . . . . LITERALLY
2 FOREVER. . . . . . LITERALLY
5 FRC. . . . . . . . LITERALLY
5 FRREC. . . . . . . LITERALLY
5 FRRECO . . . . . . LITERALLY
5 FRW. . . . . . . . LITERALLY
5 FS1. . . . . . . . LITERALLY
5 FTYPE. . . . . . . LITERALLY 191
5 FTYPE2 . . . . . . LITERALLY
5 FTYPELEN . . . . . LITERALLY
32 0000H 1 FUNC . . . . . . . BYTE PARAMETER 33
35 0000H 1 FUNC . . . . . . . BYTE PARAMETER 36
28 0000H 1 FUNC . . . . . . . BYTE PARAMETER 29
24 0000H 1 FUNC . . . . . . . BYTE PARAMETER 25
52 0043H 15 GETCONSOLENUMBER . PROCEDURE BYTE STACK=0008H
72 00B3H 98 HELP . . . . . . . PROCEDURE STACK=000CH 167 197 205 211
HIGH . . . . . . . BUILTIN 178
138 002AH 1 I. . . . . . . . . BYTE 140 142 144 146 148 150
35 0000H 2 INFO . . . . . . . WORD PARAMETER 36
32 0000H 2 INFO . . . . . . . WORD PARAMETER 33
28 0000H 2 INFO . . . . . . . WORD PARAMETER 30
24 0000H 2 INFO . . . . . . . WORD PARAMETER 26
19 000AH 2 LCB. . . . . . . . WORD MEMBER(XINIT)
10 0086H 4 LCB. . . . . . . . WORD ARRAY(2) MEMBER(SD)
20 LCBSTRUCTURE . . . LITERALLY
10 008AH 1 LCKMAX . . . . . . BYTE MEMBER(SD)
138 002BH 1 LEN. . . . . . . . BYTE 141 142
2 LF . . . . . . . . LITERALLY 73 74 75 76 77 78 79 80 81 86 94
98 166 180 187 204 210
2 LIT. . . . . . . . LITERALLY 2 3 4 5 14 15 16 17 18 19 20
PL/M-86 COMPILER VCMODE.CMD - SET VIRTUAL CONSOLE BACKGROUND MODE PAGE 14
22 23 100 101 102 103 104 105 106 107 108 109 172
10 0052H 2 LUL. . . . . . . . WORD MEMBER(SD)
3 MABORT . . . . . . LITERALLY
10 0076H 2 MAL. . . . . . . . WORD MEMBER(SD)
3 MATTACH. . . . . . LITERALLY
21 0010H 2 MAXBUFSIZ. . . . . WORD MEMBER(CCB) 95 202
156 0004H 1 MAXLEN . . . . . . BYTE PARAMETER AUTOMATIC 159 161
3 MCLOSEF. . . . . . LITERALLY
3 MCREADQ. . . . . . LITERALLY
3 MCURDSK. . . . . . LITERALLY
3 MCWRITEQ . . . . . LITERALLY
3 MDELAY . . . . . . LITERALLY
3 MDELETEF . . . . . LITERALLY
3 MDELETEQ . . . . . LITERALLY
3 MDETACH. . . . . . LITERALLY
3 MDIRBIOS . . . . . LITERALLY
3 MDISPATCH. . . . . LITERALLY
10 0058H 2 MDUL . . . . . . . WORD MEMBER(SD)
3 MERRMODE . . . . . LITERALLY
10 005AH 2 MFL. . . . . . . . WORD MEMBER(SD)
3 MGETCNS. . . . . . LITERALLY 184
3 MGETLOGIN. . . . . LITERALLY
3 MGETPD . . . . . . LITERALLY
21 0008H 1 MIMIC. . . . . . . BYTE MEMBER(CCB)
156 0006H 1 MINLEN . . . . . . BYTE PARAMETER AUTOMATIC 159 162
4 MISLEEP. . . . . . LITERALLY
4 MIWAKEUP . . . . . LITERALLY
3 MMAKEF . . . . . . LITERALLY
3 MMAKEQ . . . . . . LITERALLY
10 004CH 2 MMP. . . . . . . . WORD MEMBER(SD)
10 0046H 1 MODULEMAP. . . . . BYTE MEMBER(SD)
24 0000H MON1 . . . . . . . PROCEDURE EXTERNAL(2) STACK=0000H 40 44 50 73 74 75
76 77 78 79 80 81 86 89 92 94 96 98 113 117
166 181 187 204 210
28 0000H MON2 . . . . . . . PROCEDURE BYTE EXTERNAL(3) STACK=0000H 53 184
32 0000H MON3 . . . . . . . PROCEDURE WORD EXTERNAL(4) STACK=0000H 47
35 0000H MON4 . . . . . . . PROCEDURE POINTER EXTERNAL(5) STACK=0000H 183
3 MOPENF . . . . . . LITERALLY
3 MOPENQ . . . . . . LITERALLY
3 MPARSE . . . . . . LITERALLY
10 0040H 2 MPMSEG . . . . . . WORD MEMBER(SD)
10 007CH 2 MPMVERNUM. . . . . WORD MEMBER(SD)
3 MPRTBUF. . . . . . LITERALLY 73 74 75 76 77 78 79 80 81 86 89
92 94 96 98 166 187 204 210
3 MREADF . . . . . . LITERALLY
3 MREADQ . . . . . . LITERALLY 113
3 MREADRF. . . . . . LITERALLY
3 MRESETDRV. . . . . LITERALLY
3 MSELECT. . . . . . LITERALLY
3 MSETATT. . . . . . LITERALLY
3 MSETCNS. . . . . . LITERALLY
3 MSETDMA. . . . . . LITERALLY
3 MSETPRIOR. . . . . LITERALLY
3 MSETUSR. . . . . . LITERALLY
21 0009H 1 MSOURCE. . . . . . BYTE MEMBER(CCB)
3 MSYSDAT. . . . . . LITERALLY 183
3 MWRITEF. . . . . . LITERALLY
PL/M-86 COMPILER VCMODE.CMD - SET VIRTUAL CONSOLE BACKGROUND MODE PAGE 15
3 MWRITEQ. . . . . . LITERALLY 117
3 MWRITERF . . . . . LITERALLY
110 0008H 8 NAME . . . . . . . BYTE ARRAY(8) MEMBER(QPB)
10 0049H 1 NCCB . . . . . . . BYTE MEMBER(SD)
19 0006H 1 NCCB . . . . . . . BYTE MEMBER(XINIT)
21 0007H 1 NCHAR. . . . . . . BYTE MEMBER(CCB)
10 0085H 1 NCIODEV. . . . . . BYTE MEMBER(SD)
10 0047H 1 NCNS . . . . . . . BYTE MEMBER(SD)
10 0083H 1 NCONDEV. . . . . . BYTE MEMBER(SD)
110 0001H 1 NET. . . . . . . . BYTE MEMBER(QPB)
10 004AH 1 NFLAGS . . . . . . BYTE MEMBER(SD)
19 0007H 1 NLST . . . . . . . BYTE MEMBER(XINIT)
10 0048H 1 NLST . . . . . . . BYTE MEMBER(SD)
10 0084H 1 NLSTDEV. . . . . . BYTE MEMBER(SD)
110 0004H 2 NMSGS. . . . . . . WORD MEMBER(QPB)
2 NO . . . . . . . . LITERALLY
2 NOPAGEMODEOFFSET . LITERALLY
172 NOSTATE. . . . . . LITERALLY
10 004EH 1 NSLAVES. . . . . . BYTE MEMBER(SD)
176 0026H 2 NUM. . . . . . . . WORD 200 201 202
19 0005H 1 NVCNS. . . . . . . BYTE MEMBER(XINIT)
9 0000H 2 OFFSET . . . . . . WORD MEMBER(SYSDATPTR)
19 0000H 2 OFFSET . . . . . . WORD MEMBER(XINITPTR)
13 0000H 2 OFFSET . . . . . . WORD MEMBER(CCBPTR) 184
10 008BH 1 OPMAX. . . . . . . BYTE MEMBER(SD)
175 002DH 1 OPTIONPTR. . . . . BYTE
156 0008H 4 OSTR . . . . . . . POINTER PARAMETER AUTOMATIC 157 161
2 PAGELENOFFSET. . . LITERALLY
21 000AH 1 PC . . . . . . . . BYTE MEMBER(CCB)
58 005DH 86 PDECIMAL . . . . . PROCEDURE PUBLIC STACK=0018H 87 95
174 0358H 336 PLMSTART . . . . . PROCEDURE PUBLIC STACK=0022H
10 006EH 2 PLR. . . . . . . . WORD MEMBER(SD)
58 0006H 2 PREC . . . . . . . WORD PARAMETER AUTOMATIC 59 60 61 62 63 64
55 0052H 11 PRINTB . . . . . . PROCEDURE PUBLIC STACK=000EH 65 88
38 0002H 19 PRINTCHAR. . . . . PROCEDURE STACK=000AH 56 68
42 0015H 16 PRINTCONSOLEBUFFER PROCEDURE STACK=000AH 180
10 005CH 2 PUL. . . . . . . . WORD MEMBER(SD)
110 0002H 2 QADDR. . . . . . . WORD MEMBER(QPB) 112 116
21 0020H 2 QBUFF. . . . . . . WORD MEMBER(CCB)
101 QDSTRUCTURE. . . . LITERALLY
108 QFDEV. . . . . . . LITERALLY
104 QFHIDE . . . . . . LITERALLY
103 QFKEEP . . . . . . LITERALLY
102 QFMX . . . . . . . LITERALLY
107 QFRPL. . . . . . . LITERALLY
105 QFRSP. . . . . . . LITERALLY
106 QFTABLE. . . . . . LITERALLY
10 0074H 2 QLR. . . . . . . . WORD MEMBER(SD)
10 0060H 8 QMAU . . . . . . . WORD ARRAY(4) MEMBER(SD)
100 QNAMSIZ. . . . . . LITERALLY 110
110 000EH 16 QPB. . . . . . . . STRUCTURE 112 113 116 117
21 001EH 2 QPBBUFFPTR . . . . WORD MEMBER(CCB)
21 0018H 1 QPBFLAGS . . . . . BYTE MEMBER(CCB)
21 001CH 2 QPBNMSGS . . . . . WORD MEMBER(CCB)
21 001AH 2 QPBQADDR . . . . . WORD MEMBER(CCB)
21 0019H 1 QPBRESRVD. . . . . BYTE MEMBER(CCB)
109 QPBSTRUCTURE . . . LITERALLY 110
PL/M-86 COMPILER VCMODE.CMD - SET VIRTUAL CONSOLE BACKGROUND MODE PAGE 16
21 0002H 2 QUEUE. . . . . . . WORD MEMBER(CCB)
10 005EH 2 QUL. . . . . . . . WORD MEMBER(SD)
21 0028H 2 R1 . . . . . . . . WORD MEMBER(CCB)
21 002AH 2 R2 . . . . . . . . WORD MEMBER(CCB)
111 018AH 26 READCHANGEMXQ. . . PROCEDURE STACK=0008H 185
21 000DH 1 RESERVD. . . . . . BYTE MEMBER(CCB)
19 0003H 2 RESRVD1. . . . . . BYTE ARRAY(2) MEMBER(XINIT)
10 0068H 2 RLR. . . . . . . . WORD MEMBER(SD)
10 0042H 2 RSPSEG . . . . . . WORD MEMBER(SD)
10 0000H 145 SD . . . . . . . . STRUCTURE BASED(SYSDATPOINTER) 184
11 0000H 1 SDBYTE . . . . . . BYTE BASED(SYSDATPOINTER) ARRAY(1)
2 SECTORLEN. . . . . LITERALLY
19 0002H 2 SEGMENT. . . . . . WORD MEMBER(XINITPTR)
13 0002H 2 SEGMENT. . . . . . WORD MEMBER(CCBPTR)
9 0002H 2 SEGMENT. . . . . . WORD MEMBER(SYSDATPTR)
SHL. . . . . . . . BUILTIN 143
84 0115H 117 SHOWSTATE. . . . . PROCEDURE STACK=001EH 189 213
SIZE . . . . . . . BUILTIN 184
10 0070H 2 SLR. . . . . . . . WORD MEMBER(SD)
10 0008H 56 SPACE. . . . . . . WORD ARRAY(28) MEMBER(SD)
10 004BH 1 SRCHDISK . . . . . BYTE MEMBER(SD)
21 0005H 1 STARTCOL . . . . . BYTE MEMBER(CCB)
21 000EH 2 STATE. . . . . . . WORD MEMBER(CCB) 90 186 193 195 207
85 000CH 2 STATE. . . . . . . WORD 90 91
135 0004H 4 STR. . . . . . . . POINTER PARAMETER AUTOMATIC 136 139 141 142 146
139 0000H 1 STRING . . . . . . BYTE BASED(STR) ARRAY(1) 142 146
10 0000H 8 SUPMOD . . . . . . WORD ARRAY(4) MEMBER(SD)
8 0000H 4 SYSDATPOINTER. . . POINTER 9 10 11 183 184
9 0000H 4 SYSDATPTR. . . . . STRUCTURE AT
10 008CH 4 SYSLTOT. . . . . . WORD ARRAY(2) MEMBER(SD)
2 TAB. . . . . . . . LITERALLY 73 74 75 76 77 78 79 80
137 0020H 2 TEMP . . . . . . . WORD 149 152
10 0050H 1 TEMPDISK . . . . . BYTE MEMBER(SD)
49 0034H 15 TERMINATE. . . . . PROCEDURE STACK=0008H 82 215
10 0072H 2 THRDRT . . . . . . WORD MEMBER(SD)
19 0000H 1 TICK . . . . . . . BYTE MEMBER(XINIT)
10 0051H 1 TICKSPERSEC. . . . BYTE MEMBER(SD)
19 0001H 1 TICKSSEC . . . . . BYTE MEMBER(XINIT)
10 007EH 4 TOD. . . . . . . . WORD ARRAY(2) MEMBER(SD)
10 0082H 1 TOD_SEC. . . . . . BYTE MEMBER(SD)
2 TRUE . . . . . . . LITERALLY 87 95 163
158 0000H 1 USERSTRING . . . . BYTE BASED(USTR) ARRAY(1) 162 164
21 0024H 2 USLEEP . . . . . . WORD MEMBER(CCB)
156 000CH 4 USTR . . . . . . . POINTER PARAMETER AUTOMATIC 157 158 161 162 164
58 0008H 2 V. . . . . . . . . WORD PARAMETER AUTOMATIC 59 61 62
138 0029H 1 VAL. . . . . . . . BYTE 142 143 146 147
21 000BH 1 VC . . . . . . . . BYTE MEMBER(CCB)
1 0002H VCMODE . . . . . . PROCEDURE STACK=0000H
21 0016H 2 VCMXQ. . . . . . . WORD MEMBER(CCB) 112 116
84 0004H 2 VERB . . . . . . . WORD PARAMETER AUTOMATIC 85 89
10 007AH 2 VERNUM . . . . . . WORD MEMBER(SD)
171 0024H 2 VERS . . . . . . . WORD INITIAL 177 178
10 0078H 2 VERSION. . . . . . WORD MEMBER(SD)
46 0025H 15 VERSION. . . . . . PROCEDURE WORD STACK=0008H 177
21 0012H 2 VINQ . . . . . . . WORD MEMBER(CCB)
21 0014H 2 VOUTQ. . . . . . . WORD MEMBER(CCB)
21 0026H 2 VSLEEP . . . . . . WORD MEMBER(CCB)
PL/M-86 COMPILER VCMODE.CMD - SET VIRTUAL CONSOLE BACKGROUND MODE PAGE 17
115 01A4H 26 WRITECHANGEMXQ . . PROCEDURE STACK=0008H
19 0000H 12 XINIT. . . . . . . STRUCTURE BASED(XINITPOINTER)
19 XINITOFFSET. . . . LITERALLY
19 0008H 4 XINITPOINTER . . . POINTER 19
19 0008H 4 XINITPTR . . . . . STRUCTURE AT
58 0004H 1 ZEROSUP. . . . . . BYTE PARAMETER AUTOMATIC 59 64 67
MODULE INFORMATION:
CODE AREA SIZE = 04A8H 1192D
CONSTANT AREA SIZE = 024CH 588D
VARIABLE AREA SIZE = 002EH 46D
MAXIMUM STACK SIZE = 0022H 34D
590 LINES READ
0 PROGRAM ERROR(S)
END OF PL/M-86 COMPILATION

View File

@@ -0,0 +1,294 @@
$title('VCMODE.CMD - Set Virtual Console Background Mode')
$compact
vcmode:
do;
$include (:f2:copyrt.lit)
$include (:f2:vaxcmd.lit)
$include (:f2:comlit.lit)
$include (:f2:mfunc.lit)
$include (:f2:fcb.lit)
dcl fcb (1) byte external;
dcl buff (1) byte external;
$include (:f2:sd.lit)
dcl ccb$pointer pointer;
dcl ccb$ptr structure ( offset address, segment address) at
(@ccb$pointer);
$include (:f2:vccb.lit)
dcl ccb based ccb$pointer ccb$structure;
dcl ccpmproduct lit '14h';
dcl bdosversion lit '31h';
mon1: procedure (func,info) external;
declare func byte;
declare info address;
end mon1;
mon2: procedure (func,info) byte external;
declare func byte;
declare info address;
end mon2;
mon3: procedure (func,info) address external;
dcl func byte, info address;
end mon3;
mon4: procedure (func,info) pointer external;
dcl func byte, info address;
end mon4;
/**************************************
* *
* B D O S Externals *
* *
**************************************/
print$char: procedure(char);
declare char byte;
call mon1(2,char);
end print$char;
print$console$buffer: procedure (buffer$address);
declare buffer$address address;
call mon1 (9,buffer$address);
end print$console$buffer;
version: procedure address;
return mon3(12,0);
end version;
/**************************************
* *
* X D O S Externals *
* *
**************************************/
terminate: procedure;
call mon1 (143,0);
end terminate;
get$console$number: procedure byte;
return mon2 (153,0);
end get$console$number;
printb: procedure public;
call print$char(' ');
end printb;
pdecimal: procedure(v,prec,zerosup) public;
/* print value v, field size = (log10 prec) + 1 */
/* with leading zero suppression if zerosup = true */
declare v address, /* value to print */
prec address, /* precision */
zerosup boolean, /* zero suppression flag */
d byte; /* current decimal digit */
do while prec <> 0;
d = v / prec; /* get next digit */
v = v mod prec; /* get remainder back to v */
prec = prec / 10; /* ready for next digit */
if prec <> 0 and zerosup and d = 0 then
call printb;
else
do;
zerosup = false;
call printchar('0'+d);
end;
end;
end pdecimal;
/*lbracket: procedure byte; /* find left bracket in command tail return */
/* dcl i byte; /* its index. if not found ret 0 */
/* i = 1;
do while i <= buff(0) and (buff(i) = ' ' or buff(i) = tab);
i = i + 1;
end;
if buff(i) = '[' then
return(i);
return(0);
end lbracket;
*/
help: procedure;
call mon1(m$prt$buf, .(cr, lf, tab, tab, tab ,'VCMODE EXAMPLES$'));
call mon1(m$prt$buf, .(cr, lf, lf, 'vcmode', tab, tab, tab, tab, tab,
'(show background mode)$'));
call mon1(m$prt$buf, .(cr, lf, 'vcmode dynamic', tab, tab, tab, tab,
'(sets background mode)$'));
call mon1(m$prt$buf, .(cr, lf, 'vcmode buffered', tab, tab, tab, tab,
tab, '"$'));
/* call mon1(m$prt$buf, .(cr, lf, 'vcmode suspend', tab, tab, tab, tab,
tab, '"$'));*/
call mon1(m$prt$buf, .(cr, lf, 'vcmode size = 5', tab, tab, tab, tab,
'(sets buffered mode max file size in)$'));
call mon1(m$prt$buf, .(cr, lf, tab, tab, tab, tab, tab,
'(kilobytes, legal range is 1 to 8191)$'));
call mon1(m$prt$buf, .(cr, lf, tab, tab, tab, tab, tab,
'(also sets background mode to buffered)$'));
/* call mon1(m$prt$buf, .(cr, lf, 'vcmode size = 100H', tab, tab, tab,
'(legal range in HEX is 1H to 1FFFFH)$'));*/
call mon1(m$prt$buf, .(cr, lf, 'vcmode help', tab, tab, tab, tab,
'(prints this message)$'));
call mon1(m$prt$buf, .(cr, lf, '$'));
call terminate;
end help;
showstate: procedure (verb);
dcl (verb,state) address;
call mon1(m$prt$buf, .(cr,lf,'Background Mode For Virtual Console$'));
call pdecimal (console, 100, true);
call printb;
call mon1(m$prt$buf, verb);
state = ccb.state and csm$buffered;
if state = 0 then
call mon1(m$prt$buf, .(' Dynamic$'));
else
do;
call mon1(m$prt$buf, .(' Buffered', cr, lf, 'Maximum file size = $'));
call pdecimal(ccb.maxbufsiz, 10000, true);
call mon1(m$prt$buf, .('K$'));
end;
call mon1(m$prt$buf, .(cr, lf, '$'));
end show$state;
$include (:f2:qd.lit)
dcl qpb qpb$structure;
read$change$mxq: procedure;
qpb.qaddr = ccb.vcmxq;
call mon1 (m$readq, .qpb);
end read$change$mxq;
write$change$mxq: procedure;
qpb.qaddr = ccb.vcmxq;
call mon1 (m$writeq, .qpb);
end write$change$mxq;
atohb: procedure (char) byte public; /* convert ascii hex to nibble value */
declare char byte;
if char >= '0' and char <= '9' then
char = char - '0';
else if char >= 'A' and char <= 'F' then
char = char - 'A' + 10;
else
char = 255;
return(char);
end atohb;
atodb: procedure (char) byte public;/* convert ascii decimal to nibble value */
declare char byte;
if char >= '0' and char <= '9' then
char = char - '0';
else
char = 255;
return(char);
end atodb;
atoi: procedure(str) word; /* convert ascii to 16 bit unsigned value */
dcl str pointer;
dcl (accum, temp) word;
dcl (val, i, len) byte;
dcl string based str (1) byte;
i, accum = 0;
if (len := findb(str, 'H', 5)) <> 0ffffh then /* hex conversion */
do while (val := atohb(string(i))) <> 0ffh and i < len;
accum = shl(accum, 4) + val;
i = i + 1;
end;
else /* decimal is default base */
do while (val := atodb(string(i))) <> 0ffh and i < 5;
accum = 10 * accum + val;
if i = 4 then
temp = accum;
i = i + 1;
end;
if temp > accum then /* overflow */
accum = 0ffffh;
return(accum);
end atoi;
compare: procedure(ustr, ostr, minlen, maxlen) boolean;
dcl (ustr, ostr) pointer; /* user string, option string */
dcl user$string based ustr (1) byte;
dcl (minlen, maxlen) byte;
dcl cmplen word;
cmplen = cmpb(ustr, ostr, maxlen);
if cmplen = 0ffffh or (user$string(cmplen) = ' ' and cmplen >= minlen) then
return(true);
if user$string(cmplen) = ' ' then
do;
call mon1(m$prt$buf, .(cr,lf,'Invalid Command Option.', cr ,lf, '$'));
call help;
end;
return(false);
end compare;
dcl vers address initial (0);
dcl no$state lit '0ffh';
dcl console byte;
/*
Main Program
*/
plmstart: procedure public;
dcl option$ptr byte;
dcl num word;
vers = version;
if (high(vers) <> ccpmproduct) then
do;
call print$console$buffer(.(cr,lf,'Requires Concurrent CP/M-86', cr, lf,
'$'));
call mon1(0,0);
end;
sysdat$pointer, ccb$pointer = mon4(m$sysdat, 0); /* system data segment */
ccb$ptr.offset = sd.ccb + (console := mon2(m$getcns, 0)) * size(ccb);
call read$change$mxq; /* MXQ is written in kernel terminate code */
if (ccb.state and csm$background) <> 0 then
call mon1(m$prt$buf, .(cr,lf,'Virtual Console not in foreground', cr, lf,
'$'));
else if buff(0) = 0 then
call show$state(.('is$')); /* show current state */
else /* try to set state or show help message */
do;
fcb(f$type) = ' ';
if compare(@fcb(f$name), @('BUFFERED'), 1, 8) then
ccb.state = ccb.state or csm$buffered;
else if compare(@fcb(f$name), @('DYNAMIC'), 1, 7) then
ccb.state = ccb.state and not double(csm$buffered);
else if compare(@fcb(f$name), @('HELP'), 1, 4) then
call help;
else if compare(@fcb(f$name), @('SIZE'), 1, 4) then /* change to 2,4 */
do; /* when suspend is put back in */
num = atoi(@fcb(f$name2));
if num > 0 and num < 2000H then
ccb.maxbufsiz = num; /* limit size to 16 bit record count */
else
do;
call mon1(m$prt$buf, .(cr,lf,'File size out of range', cr ,lf, '$'));
call help;
end;
ccb.state = ccb.state or csm$buffered;
/* automatically sets to buffered */
end;
else
do;
call mon1(m$prt$buf, .(cr,lf,'Invalid Command Option.', cr ,lf, '$'));
call help;
end;
call show$state(.('set to$'));
end;
call terminate;
end plmstart;
end vcmode;