123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- Procedure OneWindow();
- % Dispatch to this routine to enter one-window mode.
- if MajorWindowCount neq 1 then % If not already one-window
- <<
- % Setup windows for one window mode.
- Setup_Windows
- list(
- % Window one looks into current buffer, other arguments are
- % location of upper left corner, and the size (0 indexed).
- WindowDescriptor(1, CurrentBufferName,
- ScreenBase, % Upper left corner
- % Size uses entire width, leaves room for
- % three one line windows at the bottom
- Coords(Column ScreenDelta,
- Row(ScreenDelta) - 3)),
- % Window 1001 looks into the "mode line" buffer.
- WindowDescriptor(1001, 'MODE_LINE,
- % Base is two lines above bottom
- Coords(Column ScreenBase,
- Row ScreenBase + Row ScreenDelta - 2),
- % a single line (so delta row = 0)
- Coords(Column ScreenDelta, 0)),
- % Window 1002 looks into the "prompt line" buffer.
- WindowDescriptor(1002, 'PROMPT_BUFFER,
- % Base is one line above bottom
- Coords(Column ScreenBase,
- Row ScreenBase + Row ScreenDelta - 1),
- % a single line (so delta row = 0)
- Coords(Column ScreenDelta, 0)),
- % Window 1003 looks into the "message buffer", used for error
- % messages and general stuff.
- WindowDescriptor(1003, 'MESSAGE_BUFFER,
- % Base is at bottom
- Coords(Column ScreenBase,
- Row ScreenBase + Row ScreenDelta),
- % a single line (so delta row = 0)
- Coords(Column ScreenDelta, 0))
- );
- % Wierd, the code seems to usually work without the following call.
- % Needs to be rethought.
- SelectWindow 1;
- FullRefresh(); % A kludge, sigh.
- MajorWindowCount := 1;
- >>;
- FLUID '(Fraction2);
- Symbolic Procedure TwoWindows();
- % Dispatch to this routine to enter two-window mode.
- if MajorWindowCount neq 2 then
- begin scalar MidPoint,frac1,lines;
- % Use roughly half (later to be a variable) the screen, allow for a
- % dividing line of dashes and 3 one line windows at the bottom.
- % MidPoint is location of dividing line of dashes, wrt ScreenBase.
- frac1:=Fraction2;
- if not(FloatP frac1 and frac1<0.9 and frac1 >0.1) then frac1:=0.5;
- lines:=(Row ScreenDelta - 3);
- MidPoint := Fix (frac1 * lines);
- if Midpoint <= 2 then Midpoint:=2;
- Setup_Windows
- list(
- % Window one looks into current buffer
- WindowDescriptor(1, CurrentBufferName,
- ScreenBase,
- Coords(Column ScreenDelta,
- MidPoint - 1)),
- % Window 1000 looks into the dividing line of dashes
- WindowDescriptor(1000, 'DASHES,
- Coords(Column ScreenBase, MidPoint),
- Coords(Column ScreenDelta, 0)),
- % Window 2 always looks into the 'ALTERNATE_WINDOW buffer,
- % until we can figure out a better way of handling the
- % situation.
- WindowDescriptor(2, 'ALTERNATE_WINDOW,
- Coords(Column ScreenBase, MidPoint + 1),
- % Run down to the bottom, minus 3 one line
- % windows.
- Coords(Column ScreenDelta,
- Row ScreenDelta - MidPoint - 4)),
- % Window 1001 looks into the "mode line" buffer.
- WindowDescriptor(1001, 'MODE_LINE,
- % Base is two lines above bottom
- Coords(Column ScreenBase,
- Row ScreenBase + Row ScreenDelta - 2),
- % a single line (so delta row = 0)
- Coords(Column ScreenDelta, 0)),
- % Window 1002 looks into the "prompt line" buffer.
- WindowDescriptor(1002, 'PROMPT_BUFFER,
- % Base is one line above bottom
- Coords(Column ScreenBase,
- Row ScreenBase + Row ScreenDelta - 1),
- % a single line (so delta row = 0)
- Coords(Column ScreenDelta, 0)),
- % Window 1003 looks into the "message buffer", used for error
- % messages and general stuff.
- WindowDescriptor(1003, 'MESSAGE_BUFFER,
- % Base is at bottom
- Coords(Column ScreenBase,
- Row ScreenBase + Row ScreenDelta),
- % a single line (so delta row = 0)
- Coords(Column ScreenDelta, 0))
- );
- % Wierd, the code seems to usually work without the following call.
- % Needs to be rethought.
- SelectWindow 1;
- FullRefresh(); % A kludge, sigh.
- MajorWindowCount := 2;
- end;
- Fraction2 :=0.5;
- procedure ResetEmode(rows,cols,f);
- if cols >=10 and cols<=79
- and rows>=6 and rows <=60 then
- <<ScreenDelta:= Cols . Rows;
- If FloatP F and F>=0.1 and F <=0.9 then Fraction2:=F;
- if MajorWindowCount =1 then <<MajorWindowCount:=0;
- OneWindow()>>
- else
- if MajorWindowCount = 2 then <<MajorWindowCount:=0;
- TwoWindows()>>
- >>;
- procedure resetrows(r);
- resetScreen(car ScreenDelta,r);
- procedure SetEmode(rows,cols,f);
- Begin Scalar !*EMODE;
- if cols >=10 and cols<=79
- and rows>=6 and rows <=60 then
- ScreenDelta:= Cols . Rows;
- If FloatP F and f>=0.1 and f<=0.9 then Fraction2:=f;
- !*EMODE:=T;
- FreshEmode();
- End;
|