// MenuEditMore.bcpl -- additional procedures for MenuEdit
// by L. Stewart last modified March 8, 1978 9:43 PM
get "MenuDefs.d"
external // incoming OS procedures
[
Ws
Wns
Gets
Zero
]
external // incoming statics
[
menu
selected
dcb
systemdcb
keys // OS statics
]
external //incoming procedures
[
getnumber
getname
DCBPress
]
external //outgoing procedures
[
Instructions
Sensitize
ShowSensitize
DotCorners
JustifyText
Boundary
DoDCBPress
]
static //internal statics
[
pNameDefault
]
let DotCorners(box;numargs na) = valof
[
// Writes black dots into box corners
if (na eq 0) % (box eq 0) then resultis false
// define boundaries of the box
let Xo=box>>BOX.xorigin
let Yo=box>>BOX.yorigin
let Xc=box>>BOX.xcorner
let Yc=box>>BOX.ycorner
if Xo eq Xc % Yo eq Yc then resultis false
// get dcb
let dcb=box>>BOX.dcb
if dcb eq 0 then resultis false
let width=dcb>>DCB.width
// draw in corner dots
// using erase function from BoxUtils.asm
// erase(nbits,wordstart,bitstart,nwords,nlines,flag [0])
let wordstart=dcb>>DCB.bitmap+Yo*width
erase(1,wordstart,Xo,width,1,1)
erase(1,wordstart,Xc,width,1,1)
wordstart=dcb>>DCB.bitmap+Yc*width
erase(1,wordstart,Xo,width,1,1)
erase(1,wordstart,Xc,width,1,1)
resultis true
]
and Sensitize(switch) be
[
if selected!0 ls 1 then return
let box=nil
for n=1 to selected!0 do
[
box=menu!(selected!n)
box>>BOX.sensitive=switch
]
]
and ShowSensitize() be
[
if menu!0 ls 1 then return
let box=nil
Zero(selected,MaxLength)
for n=1 to menu!0 do
[
box=menu!n
if (box>>BOX.sensitive ne 0) then
[
selected!0 = selected!0+1
selected!(selected!0)=n
]
]
]
and JustifyText(switch) be
[
if selected!0 ls 1 then return
let box=nil
let joffs=nil
@#420=systemdcb
test switch
ifso joffs=getnumber("*NLeft margin",4)
ifnot joffs=0
for n=1 to selected!0 do
[
box=menu!(selected!n)
box>>BOX.ljustified=switch
box>>BOX.joffset=joffs
]
]
and Instructions() be
[
@#420=systemdcb
Ws("*N*N*N*N*N")
Ws("*Na/A autoDeSelect ON/OFF, c-change, d-delete, e/E-Set/Clear Sensitivity, g-set gap")
Ws("*Ni-insert string, j/J-Justify/Center Text, l-line up, n-name, o-outline, p-pressfile")
Ws("*Nr-read, s-same size, <TAB>-refresh, v-See Sensitives, w-write.")
Ws("*NType any char to continue.")
Gets(keys)
]
and Boundary() be
[
// move all selected windows to word boundaries
for n=1 to selected!0 do
[
let box=menu!(selected!n)
let Xo=box>>BOX.xorigin
let remain=Xo rem 16
box>>BOX.xorigin=Xo-remain
box>>BOX.xcorner=box>>BOX.xcorner-remain
]
]
and DoDCBPress() be
[
@#420=systemdcb
if pNameDefault eq 0 then pNameDefault="MenuDisplay.Press"
let name=getname("*NPress File Name",pNameDefault)
if name eq 0 then name = pNameDefault
pNameDefault=name
DCBPress(name,dcb)
]