home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
simtel
/
sigm
/
vols000
/
vol079
/
mpmcallc.pli
< prev
next >
Wrap
Text File
|
1984-04-29
|
8KB
|
313 lines
mc:
proc;
/*
Direct MP/M Call Test Program (Cont'd)
--------------------------------------
Refer to the comment at the beginning of the
MPMCALLS PLI program.
*/
/* external MP/M I/O entry points */
/* (note: each source line begins with tab chars) */
%replace
true by '1'b,
false by '0'b;
%include 'mpmdio.dcl';
dcl
sysin file,
oldpriority fixed(7),
v char(254) var,
i fixed;
dcl
pdadr ptr,
1 pd based (pdadr),
2 link ptr,
2 status fixed(7),
2 priority fixed(7),
2 stkptr ptr,
2 name char(8),
2 console fixed(7),
2 memseg fixed(7),
2 b fixed(15),
2 thread ptr,
2 dmadr ptr,
2 slct bit(8);
/* 2 dcnt fixed(15),
2 searchl fixed(7),
2 searcha ptr,
2 drvact bit(16),
2 registers (20) fixed(7),
2 scratch fixed(15);
*/
pdadr = rpdadr(); /* get current running pd adr */
oldpriority = pd.priority;
dcl
upper char(27) static initial
('ABCDEFGHIJKLMNOPQRSTUVWXYZ '),
lower char(27) static initial
('abcdefghijklmnopqrstuvwxyz ');
/**********************************
* *
* Local procedures used during *
* testing. *
* *
**********************************/
clresptest:
proc (stringadr) returns (ptr);
dcl
stringadr ptr,
string based (stringadr) char(27);
put edit ('->STRING proc passed: ',string)
(skip,a,a(27));
return (addr (lower));
end clresptest;
/**********************************
* *
* Delay Test: *
* *
**********************************/
put skip(2) list ('Delay Test:');
put skip list ('->a dot will be printed each second');
put list ('for ten seconds ');
do i = 1 to 10;
call delay (60);
put edit ('.') (a);
end;
/**********************************
* *
* Disptach Test: *
* *
**********************************/
put skip(2) list ('Dispatch Test:');
call dsptch();
put skip list ('->dispatch successful.');
/**********************************
* *
* Console Tests: *
* ATTCON, DETCON already tested *
* SETCON not tested *
* ASNCON tested in send CLI cmd *
* GETCON *
* *
**********************************/
put skip(2) list ('Console Test:');
put edit ('->current console is #',getcon())
(skip,a,f(2));
/**********************************
* *
* Send CLI Command Test: *
* This example shows how to run *
* a program in another memory *
* segment and then get the con- *
* sole back to the main program.*
* E.G. as in a menu driven *
* application. *
* *
**********************************/
dcl
1 clicmd,
2 dslct bit(8), /* default disk / user code */
2 console fixed(7), /* console number */
2 line char(128);
dcl
1 apb static,
2 console fixed(7),
2 name char(8) initial ('cli '),
2 match bit(8) initial ('00'b4);
put skip(2) list ('Send CLI Command Test:');
on endfile (sysin)
go to clresptst;
pdadr = rpdadr(); /* get current running pd adr */
oldpriority = pd.priority;
clicmd.dslct = pd.slct;
clicmd.console = pd.console;
apb.console = pd.console;
do while (true);
put skip list (' Enter CLI Command: ');
get edit (clicmd.line) (a);
if ~asncon (addr (apb)) then
do;
put skip list ('*** Failed to assign Cli the console ***');
end;
else
do;
call setpri (197);
call sclicd (addr (clicmd));
call attcon();
call setpri (oldpriority);
end;
end;
/**********************************
* *
* Call Resident System Proc Test: *
* *
**********************************/
dcl
1 cpb,
2 nameadr ptr,
2 paramadr ptr;
dcl
aparam ptr;
dcl
procname char(8) static initial ('STRING ');
dcl
1 stringqcb static,
2 link fixed(15),
2 name char(8) initial ('STRING '),
2 msglen fixed(15) initial (2),
2 nmbmsgs fixed(15) initial (1),
2 dqph ptr,
2 nqph ptr,
2 msgin ptr,
2 msgout ptr,
2 msgcnt fixed(15),
2 buffer ptr;
dcl
1 stringuqcb,
2 pointer ptr,
2 msgadr ptr;
dcl
stringprocadr entry (fixed) variable returns(ptr);
dcl
rtnstringadr ptr,
rtnstring based (rtnstringadr) char(27);
clresptst:
get edit (v) (a); /* clear input buffer */
put skip(2) list ('Call Resident System Process Test:');
call makque (addr (stringqcb));
stringuqcb.pointer = addr (stringqcb);
stringuqcb.msgadr = addr (stringprocadr);
stringprocadr = clresptest;
call wrque (addr (stringuqcb));
cpb.nameadr = addr (procname);
cpb.paramadr = addr (aparam);
aparam = addr (upper);
unspec (rtnstringadr) = clresp (addr (cpb));
put edit ('->STRING proc returned:',rtnstring)
(skip,a,a(27));
if ~delque (addr (stringqcb)) then
do;
put skip list ('*** Unable to delete stringqcb ***');
call term ('0000'b4);
end;
put skip list ('->Call clresp test complete.');
/**********************************
* *
* Parse Filename Test: *
* *
**********************************/
dcl
done bit(1);
dcl
line char(80);
dcl
1 pfcb,
2 flname ptr,
2 fcb ptr;
dcl
delimptr ptr,
delim based (delimptr) char(1);
dcl
oldptr ptr,
old based (oldptr) char(10);
dcl
1 afcb,
2 name,
3 drive fixed(7),
3 fname char(8),
3 ftype char(3);
put skip(2) list ('Parse Filename Test:');
on endfile (sysin)
go to gettodtest;
put skip list (' Enter string of filenames to be parsed,');
put list ('separated by commas:');
do while (true);
put skip list ('->');
get edit (line) (a);
line = substr (line,1,index (line,' ')-1) || ascii (13);
pfcb.flname = addr (line);
pfcb.fcb = addr (afcb);
oldptr = addr (line);
done = false;
pfcb.flname = parse (addr (pfcb));
do while (~done & (unspec (pfcb.flname) ~= 'ffff'b4));
oldptr = pfcb.flname;
put edit (' ',ascii (afcb.drive+64),': ',
afcb.fname,' ',afcb.ftype)
(skip,a,a,a,a(8),a,a(3));
if unspec (pfcb.flname) = '0000'b4 then
do;
done = true;
end;
else
do;
delimptr = pfcb.flname;
if delim = ',' then
do;
unspec (i) = unspec (pfcb.flname);
i = i + 1;
unspec (pfcb.flname) = unspec (i);
end;
pfcb.flname = parse (addr (pfcb));
end;
end;
if ~done then
do;
put skip list (' *** Bad Entry *** ->');
put edit (old) (a(10));
end;
end;
/**********************************
* *
* Time and Date Test: *
* *
**********************************/
dcl
1 tod,
2 date fixed(15),
2 time,
3 hour bit(8),
3 min bit(8),
3 sec bit(8);
gettodtest:
get edit (v) (a); /* clear input buffer */
put skip(2) list ('Time and Date Test:');
call gettod (addr (tod));
put edit ('-> ',tod.date,' ',tod.hour,':',tod.min,':',tod.sec)
(skip,a,f(5),a,b4(2),a,b4(2),a,b4(2));
end mc;