home *** CD-ROM | disk | FTP | other *** search
- /* > plotc */
-
- #include <stdio.h>
- #include "swis.h"
- #include "kernel.h"
- #include "ploth.h"
-
- #define LineLength 6
- #define ScreenSize 7
- #define XWindLimit 11
- #define YWindLimit 12
-
- #define ScreenStart 148
-
- static int screen_mode = 128+9; /* or 20 */
-
- static int swapn = 0;
- static int screen_adr0;
- int screen_adr;
-
- static const int InBlock[] = {ScreenStart, -1};
- static int linelen;
- static int screenlen;
-
- static volatile int vsync = 0;
-
- extern void plot_begin(void)
- {
- _kernel_osbyte(112, 1+swapn, 0);
-
- screen_adr = (swapn==0 ? 0 : screenlen) + screen_adr0;
-
- do {} while (vsync != 0);
-
- clg9(screen_adr);
-
- plotdata((char*)screen_adr);
- }
-
- extern int plot_show(void)
- {
- _kernel_osbyte(113, 1+swapn, 0);
-
- vsync = 1;
-
- swapn = 1 - swapn;
-
- return _kernel_escape_seen();
- }
-
- extern int plot_init(void)
- {
- _kernel_swi_regs regs;
- int OutBlock[1];
-
- _kernel_oswrch(22);
- _kernel_oswrch(screen_mode);
-
- _kernel_oswrch(18); /* background colour 2 */
- _kernel_oswrch(0);
- _kernel_oswrch(130);
-
- _kernel_swi(OS_RemoveCursors, ®s, ®s);
-
- _kernel_osbyte(112, 1, 0);
- _kernel_oswrch(16); /* clg */
- _kernel_osbyte(112, 2, 0);
- _kernel_oswrch(16);
-
- _kernel_oswrch(29); /* origin at centre */
- _kernel_oswrch(640 % 256);
- _kernel_oswrch(640 / 256);
- _kernel_oswrch(512 % 256);
- _kernel_oswrch(512 / 256);
-
- _kernel_osbyte(106, 1, 0); /* mouse on */
-
- regs.r[0] = screen_mode;
- regs.r[1] = LineLength;
- _kernel_swi(OS_ReadModeVariable, ®s, ®s);
- linelen = regs.r[2];
-
- regs.r[0] = screen_mode;
- regs.r[1] = ScreenSize;
- _kernel_swi(OS_ReadModeVariable, ®s, ®s);
- screenlen = regs.r[2];
-
- regs.r[0] = (int)&InBlock;
- regs.r[1] = (int)&OutBlock;
- _kernel_swi(OS_ReadVduVariables, ®s, ®s);
- screen_adr0 = OutBlock[0] - screenlen;
-
- regs.r[0] = 0x10;
- regs.r[1] = (int)&vsync_event;
- regs.r[2] = (int)&vsync;
- _kernel_swi(OS_Claim, ®s, ®s);
-
- _kernel_osbyte(14, 4, 0);
-
-
- plot_begin();
- plot_show();
-
- return _kernel_escape_seen();
- }
-
- extern void plot_end(void)
- {
- _kernel_swi_regs regs;
-
- _kernel_osbyte(13, 4, 0);
-
- regs.r[0] = 0x10;
- regs.r[1] = (int)&vsync_event;
- regs.r[2] = (int)&vsync;
- _kernel_swi(OS_Release, ®s, ®s);
-
- _kernel_swi(OS_RestoreCursors, ®s, ®s);
-
- _kernel_oswrch(22);
- _kernel_oswrch(12);
-
- }
-