My Git and repositories are configured for POSIX; but sometimes, Windows line endings "sneak" into new files.
-;\r
-; Pointer for library references by device drivers.\r
-;\r
-; 2013-07-25, Greg King\r
-;\r
-\r
- .export mouse_libref, _pen_adjuster\r
-\r
- .data\r
-\r
-mouse_libref: ; generic label for mouse-kernel\r
-\r
-; A program optionally can set this pointer to a function that gives\r
-; a calibration value to a driver. If this pointer isn't NULL,\r
-; then a driver that wants a value can call that function.\r
-;\r
-; The function might read a value from a file; or, it might ask the user\r
-; to help calibrate the driver.\r
-;\r
-; void __fastcall__ (*pen_adjuster)(unsigned char *) = NULL;\r
-;\r
-_pen_adjuster:\r
- .addr $0000\r
+;
+; Pointer for library references by device drivers.
+;
+; 2013-07-25, Greg King
+;
+
+ .export mouse_libref, _pen_adjuster
+
+ .data
+
+mouse_libref: ; generic label for mouse-kernel
+
+; A program optionally can set this pointer to a function that gives
+; a calibration value to a driver. If this pointer isn't NULL,
+; then a driver that wants a value can call that function.
+;
+; The function might read a value from a file; or, it might ask the user
+; to help calibrate the driver.
+;
+; void __fastcall__ (*pen_adjuster)(unsigned char *) = NULL;
+;
+_pen_adjuster:
+ .addr $0000
-/*\r
-** Calibrate lightpen drivers to the current video hardware.\r
-**\r
-** 2013-07-25, Greg King\r
-**\r
-*/\r
-\r
-\r
-#include <conio.h>\r
-#include <mouse.h>\r
-#include <pen.h>\r
-\r
-\r
-#define COMMAND1 "Adjust by clicking on line."\r
-#define COMMAND2 "Finish by clicking off bar."\r
-\r
-\r
-/* There is a delay between when the VIC sends its signal, and when the display\r
-** shows that signal. There is another delay between the display and when the\r
-** lightpen says that it saw that signal. Each display and pen is different.\r
-** Therefore, the driver must be calibrated to them. A white bar is painted on\r
-** the screen; and, a line is drawn down the middle of it. When the user\r
-** clicks on that line, the difference between its position and where the VIC\r
-** thinks that the pen is pointing becomes an offset that is subtracted from\r
-** what the VIC sees.\r
-*/\r
-void __fastcall__ pen_calibrate (unsigned char *XOffset)\r
-{\r
- unsigned char oldBg = bgcolor (COLOR_BLUE);\r
- unsigned char oldText = textcolor (COLOR_GRAY3);\r
- unsigned char oldRev = revers (1);\r
- unsigned char sprite0Color = VIC.spr_color[0];\r
- unsigned char width, width2, height, height4, height8;\r
- struct mouse_info info;\r
-\r
- screensize (&width, &height);\r
- width2 = width / 2;\r
- height4 = height / 4;\r
- height8 = height4 * 8;\r
-\r
- /* Draw a bar and line. */\r
-\r
- clrscr ();\r
- cclearxy (0, height4, height4 * width);\r
- cvlinexy (width2, height4 + 1, height4 - 2);\r
-\r
- /* Print instructions. */\r
-\r
- revers (0);\r
- cputsxy (width2 - (sizeof COMMAND1) / 2, height / 2 + 1, COMMAND1);\r
- cputsxy (width2 - (sizeof COMMAND2) / 2, height / 2 + 3, COMMAND2);\r
-\r
- VIC.spr_color[0] = COLOR_GRAY2;\r
- mouse_show ();\r
- mouse_move (width2 * 8, height8 / 2);\r
-\r
- for (;;) {\r
- /* Wait for the main button to be released. */\r
-\r
- do ; while ((mouse_buttons () & MOUSE_BTN_LEFT));\r
-\r
- /* Wait for the main button to be pressed. */\r
-\r
- do {\r
- mouse_info (&info);\r
- } while (!(info.buttons & MOUSE_BTN_LEFT));\r
-\r
- /* Find out if the pen is on or off the bar. */\r
-\r
- if (info.pos.y < height8 || info.pos.y >= height8 * 2) {\r
- break;\r
- }\r
-\r
- /* On the bar; adjust the offset. */\r
- /* Characters are eight pixels wide.\r
- ** The VIC-II sees every other pixel;\r
- ** so, we use half of the difference.\r
- */\r
-\r
- *XOffset += (info.pos.x - (width2 * 8 + 8/2)) / 2;\r
- }\r
-\r
- /* Off the bar; wait for the main button to be released. */\r
-\r
- do ; while ((mouse_buttons () & MOUSE_BTN_LEFT));\r
-\r
- mouse_hide ();\r
- VIC.spr_color[0] = sprite0Color;\r
- revers (oldRev);\r
- textcolor (oldText);\r
- bgcolor (oldBg);\r
- clrscr ();\r
-}\r
+/*
+** Calibrate lightpen drivers to the current video hardware.
+**
+** 2013-07-25, Greg King
+**
+*/
+
+
+#include <conio.h>
+#include <mouse.h>
+#include <pen.h>
+
+
+#define COMMAND1 "Adjust by clicking on line."
+#define COMMAND2 "Finish by clicking off bar."
+
+
+/* There is a delay between when the VIC sends its signal, and when the display
+** shows that signal. There is another delay between the display and when the
+** lightpen says that it saw that signal. Each display and pen is different.
+** Therefore, the driver must be calibrated to them. A white bar is painted on
+** the screen; and, a line is drawn down the middle of it. When the user
+** clicks on that line, the difference between its position and where the VIC
+** thinks that the pen is pointing becomes an offset that is subtracted from
+** what the VIC sees.
+*/
+void __fastcall__ pen_calibrate (unsigned char *XOffset)
+{
+ unsigned char oldBg = bgcolor (COLOR_BLUE);
+ unsigned char oldText = textcolor (COLOR_GRAY3);
+ unsigned char oldRev = revers (1);
+ unsigned char sprite0Color = VIC.spr_color[0];
+ unsigned char width, width2, height, height4, height8;
+ struct mouse_info info;
+
+ screensize (&width, &height);
+ width2 = width / 2;
+ height4 = height / 4;
+ height8 = height4 * 8;
+
+ /* Draw a bar and line. */
+
+ clrscr ();
+ cclearxy (0, height4, height4 * width);
+ cvlinexy (width2, height4 + 1, height4 - 2);
+
+ /* Print instructions. */
+
+ revers (0);
+ cputsxy (width2 - (sizeof COMMAND1) / 2, height / 2 + 1, COMMAND1);
+ cputsxy (width2 - (sizeof COMMAND2) / 2, height / 2 + 3, COMMAND2);
+
+ VIC.spr_color[0] = COLOR_GRAY2;
+ mouse_show ();
+ mouse_move (width2 * 8, height8 / 2);
+
+ for (;;) {
+ /* Wait for the main button to be released. */
+
+ do ; while ((mouse_buttons () & MOUSE_BTN_LEFT));
+
+ /* Wait for the main button to be pressed. */
+
+ do {
+ mouse_info (&info);
+ } while (!(info.buttons & MOUSE_BTN_LEFT));
+
+ /* Find out if the pen is on or off the bar. */
+
+ if (info.pos.y < height8 || info.pos.y >= height8 * 2) {
+ break;
+ }
+
+ /* On the bar; adjust the offset. */
+ /* Characters are eight pixels wide.
+ ** The VIC-II sees every other pixel;
+ ** so, we use half of the difference.
+ */
+
+ *XOffset += (info.pos.x - (width2 * 8 + 8/2)) / 2;
+ }
+
+ /* Off the bar; wait for the main button to be released. */
+
+ do ; while ((mouse_buttons () & MOUSE_BTN_LEFT));
+
+ mouse_hide ();
+ VIC.spr_color[0] = sprite0Color;
+ revers (oldRev);
+ textcolor (oldText);
+ bgcolor (oldBg);
+ clrscr ();
+}
-;\r
-; Pointer for library references by device drivers.\r
-;\r
-; 2013-07-25, Greg King\r
-;\r
-\r
- .export mouse_libref, _pen_adjuster\r
-\r
- .data\r
-\r
-mouse_libref: ; generic label for mouse-kernel\r
-\r
-; A program optionally can set this pointer to a function that gives\r
-; a calibration value to a driver. If this pointer isn't NULL,\r
-; then a driver that wants a value can call that function.\r
-;\r
-; The function might read a value from a file; or, it might ask the user\r
-; to help calibrate the driver.\r
-;\r
-; void __fastcall__ (*pen_adjuster)(unsigned char *) = NULL;\r
-;\r
-_pen_adjuster:\r
- .addr $0000\r
+;
+; Pointer for library references by device drivers.
+;
+; 2013-07-25, Greg King
+;
+
+ .export mouse_libref, _pen_adjuster
+
+ .data
+
+mouse_libref: ; generic label for mouse-kernel
+
+; A program optionally can set this pointer to a function that gives
+; a calibration value to a driver. If this pointer isn't NULL,
+; then a driver that wants a value can call that function.
+;
+; The function might read a value from a file; or, it might ask the user
+; to help calibrate the driver.
+;
+; void __fastcall__ (*pen_adjuster)(unsigned char *) = NULL;
+;
+_pen_adjuster:
+ .addr $0000
-/*\r
-** Calibrate lightpen drivers to the current video hardware.\r
-**\r
-** 2013-07-25, Greg King\r
-**\r
-*/\r
-\r
-\r
-#include <conio.h>\r
-#include <mouse.h>\r
-#include <pen.h>\r
-\r
-\r
-#define COMMAND1 "Adjust by clicking on line."\r
-#define COMMAND2 "Finish by clicking off bar."\r
-\r
-\r
-/*\r
-** There is a delay between when the VIC sends its signal, and when the display\r
-** shows that signal. There is another delay between the display and when\r
-** the lightpen says that it saw that signal. Each display and pen is different.\r
-** Therefore, the driver must be calibrated to them. A white bar is painted on\r
-** the screen; and, a line is drawn down the middle of it. When the user clicks\r
-** on that line, the difference between its position and where the VIC thinks\r
-** that the pen is pointing becomes an offset that is subtracted from what the\r
-** VIC sees.\r
-*/\r
-void __fastcall__ pen_calibrate (unsigned char *XOffset)\r
-{\r
- unsigned char oldBg = bgcolor (COLOR_BLUE);\r
- unsigned char oldText = textcolor (COLOR_GRAY3);\r
- unsigned char oldRev = revers (1);\r
- unsigned char sprite0Color = VIC.spr_color[0];\r
- unsigned char width, width2, height, height4, height8;\r
- struct mouse_info info;\r
-\r
- screensize (&width, &height);\r
- width2 = width / 2;\r
- height4 = height / 4;\r
- height8 = height4 * 8;\r
-\r
- /* Draw a bar and line. */\r
-\r
- clrscr ();\r
- cclearxy (0, height4, height4 * width);\r
- cvlinexy (width2, height4 + 1, height4 - 2);\r
- revers (0);\r
-\r
- /* Print instructions. */\r
-\r
- cputsxy (width2 - (sizeof COMMAND1) / 2, height / 2 + 1, COMMAND1);\r
- cputsxy (width2 - (sizeof COMMAND2) / 2, height / 2 + 3, COMMAND2);\r
-\r
- VIC.spr_color[0] = COLOR_GRAY2;\r
- mouse_show ();\r
- mouse_move (width2 * 8, height8 / 2);\r
-\r
- for (;;) {\r
- /* Wait for the main button to be released. */\r
-\r
- do ; while ((mouse_buttons () & MOUSE_BTN_LEFT));\r
-\r
- /* Wait for the main button to be pressed. */\r
-\r
- do {\r
- mouse_info (&info);\r
- } while (!(info.buttons & MOUSE_BTN_LEFT));\r
-\r
- /* Find out if the pen is on or off the bar. */\r
-\r
- if (info.pos.y < height8 || info.pos.y >= height8 * 2) {\r
- break;\r
- }\r
-\r
- /* On the bar; adjust the offset. */\r
- /* Characters are eight pixels wide.\r
- ** The VIC-II sees every other pixel;\r
- ** so, we use half of the difference.\r
- */\r
-\r
- *XOffset += (info.pos.x - (width2 * 8 + 8/2)) / 2;\r
- }\r
-\r
- /* Off the bar; wait for the main button to be released. */\r
-\r
- do ; while ((mouse_buttons () & MOUSE_BTN_LEFT));\r
-\r
- mouse_hide ();\r
- VIC.spr_color[0] = sprite0Color;\r
- revers (oldRev);\r
- textcolor (oldText);\r
- bgcolor (oldBg);\r
- clrscr ();\r
-}\r
+/*
+** Calibrate lightpen drivers to the current video hardware.
+**
+** 2013-07-25, Greg King
+**
+*/
+
+
+#include <conio.h>
+#include <mouse.h>
+#include <pen.h>
+
+
+#define COMMAND1 "Adjust by clicking on line."
+#define COMMAND2 "Finish by clicking off bar."
+
+
+/*
+** There is a delay between when the VIC sends its signal, and when the display
+** shows that signal. There is another delay between the display and when
+** the lightpen says that it saw that signal. Each display and pen is different.
+** Therefore, the driver must be calibrated to them. A white bar is painted on
+** the screen; and, a line is drawn down the middle of it. When the user clicks
+** on that line, the difference between its position and where the VIC thinks
+** that the pen is pointing becomes an offset that is subtracted from what the
+** VIC sees.
+*/
+void __fastcall__ pen_calibrate (unsigned char *XOffset)
+{
+ unsigned char oldBg = bgcolor (COLOR_BLUE);
+ unsigned char oldText = textcolor (COLOR_GRAY3);
+ unsigned char oldRev = revers (1);
+ unsigned char sprite0Color = VIC.spr_color[0];
+ unsigned char width, width2, height, height4, height8;
+ struct mouse_info info;
+
+ screensize (&width, &height);
+ width2 = width / 2;
+ height4 = height / 4;
+ height8 = height4 * 8;
+
+ /* Draw a bar and line. */
+
+ clrscr ();
+ cclearxy (0, height4, height4 * width);
+ cvlinexy (width2, height4 + 1, height4 - 2);
+ revers (0);
+
+ /* Print instructions. */
+
+ cputsxy (width2 - (sizeof COMMAND1) / 2, height / 2 + 1, COMMAND1);
+ cputsxy (width2 - (sizeof COMMAND2) / 2, height / 2 + 3, COMMAND2);
+
+ VIC.spr_color[0] = COLOR_GRAY2;
+ mouse_show ();
+ mouse_move (width2 * 8, height8 / 2);
+
+ for (;;) {
+ /* Wait for the main button to be released. */
+
+ do ; while ((mouse_buttons () & MOUSE_BTN_LEFT));
+
+ /* Wait for the main button to be pressed. */
+
+ do {
+ mouse_info (&info);
+ } while (!(info.buttons & MOUSE_BTN_LEFT));
+
+ /* Find out if the pen is on or off the bar. */
+
+ if (info.pos.y < height8 || info.pos.y >= height8 * 2) {
+ break;
+ }
+
+ /* On the bar; adjust the offset. */
+ /* Characters are eight pixels wide.
+ ** The VIC-II sees every other pixel;
+ ** so, we use half of the difference.
+ */
+
+ *XOffset += (info.pos.x - (width2 * 8 + 8/2)) / 2;
+ }
+
+ /* Off the bar; wait for the main button to be released. */
+
+ do ; while ((mouse_buttons () & MOUSE_BTN_LEFT));
+
+ mouse_hide ();
+ VIC.spr_color[0] = sprite0Color;
+ revers (oldRev);
+ textcolor (oldText);
+ bgcolor (oldBg);
+ clrscr ();
+}
-/*\r
-** Main lightpen driver calibration functions.\r
-**\r
-** 2013-07-25, Greg King\r
-*/\r
-\r
-\r
-#include <stddef.h>\r
-#include <fcntl.h>\r
-#include <unistd.h>\r
-#include <pen.h>\r
-\r
-\r
-static const char *name;\r
-\r
-\r
-/* Get a lightpen calibration value from a file if it exists. Otherwise, call\r
-** pen_calibrate() to create a value; then, write it into a file, so that it\r
-** will be available at the next time that the lightpen is used.\r
-** Might change the screen.\r
-*/\r
-static void __fastcall__ adjuster (unsigned char *XOffset)\r
-{\r
- int fd = open (name, O_RDONLY);\r
-\r
- if (fd < 0) {\r
- pen_calibrate (XOffset);\r
- fd = open (name, O_WRONLY | O_CREAT | O_EXCL);\r
- if (fd >= 0) {\r
- (void) write (fd, XOffset, 1);\r
- close (fd);\r
- }\r
- } else {\r
- (void) read (fd, XOffset, 1);\r
- close (fd);\r
- }\r
-}\r
-\r
-\r
-/* pen_adjust() is optional; if you want to use its feature,\r
-** then it must be called before a driver is installed.\r
-** Note: This function merely saves the file-name pointer, and sets\r
-** the pen_adjuster pointer. The file will be read only when a driver\r
-** is installed, and only if that driver wants to be calibrated.\r
-*/\r
-void __fastcall__ pen_adjust (const char *filename)\r
-{\r
- if (filename != NULL && filename[0] != '\0') {\r
- name = filename;\r
- pen_adjuster = adjuster;\r
- } else {\r
- pen_adjuster = pen_calibrate;\r
- }\r
-}\r
+/*
+** Main lightpen driver calibration functions.
+**
+** 2013-07-25, Greg King
+*/
+
+
+#include <stddef.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <pen.h>
+
+
+static const char *name;
+
+
+/* Get a lightpen calibration value from a file if it exists. Otherwise, call
+** pen_calibrate() to create a value; then, write it into a file, so that it
+** will be available at the next time that the lightpen is used.
+** Might change the screen.
+*/
+static void __fastcall__ adjuster (unsigned char *XOffset)
+{
+ int fd = open (name, O_RDONLY);
+
+ if (fd < 0) {
+ pen_calibrate (XOffset);
+ fd = open (name, O_WRONLY | O_CREAT | O_EXCL);
+ if (fd >= 0) {
+ (void) write (fd, XOffset, 1);
+ close (fd);
+ }
+ } else {
+ (void) read (fd, XOffset, 1);
+ close (fd);
+ }
+}
+
+
+/* pen_adjust() is optional; if you want to use its feature,
+** then it must be called before a driver is installed.
+** Note: This function merely saves the file-name pointer, and sets
+** the pen_adjuster pointer. The file will be read only when a driver
+** is installed, and only if that driver wants to be calibrated.
+*/
+void __fastcall__ pen_adjust (const char *filename)
+{
+ if (filename != NULL && filename[0] != '\0') {
+ name = filename;
+ pen_adjuster = adjuster;
+ } else {
+ pen_adjuster = pen_calibrate;
+ }
+}