#include "windows.h" /* required for all Windows applications */
#include "windowsx.h" /* required for all Windows applications */
#include <shellapi.h>
#include <mmsystem.h>
#include <string.h>
#include <stdlib.h>
#include <sys\stat.h>
#include <sys\timeb.h> // For extended timer definitions
#include <time.h>
#include <stdio.h>
#include <io.h>
#include "select.h"
#include <ddeml.h>
#include "wat.h"
#include "watom.h"
#include "midiout.h"
#include "midi_cb.h" // header file for DLL containing callback
#define min(a,b) (((a) < (b)) ? (a) : (b))
#define max(a,b) (((a) > (b)) ? (a) : (b))
#define PRINTING // needed so constants are defined
// 123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
#define SPACE " "
#ifndef _GLOBALINC
#include "global.h"
#endif
#include <drivinit.h> // contains printing constants
BOOL bKey = FALSE;
unsigned char regels; // aantal afgedrukte regels in pagemode
BOOL bSchermstatus; // controle voor tekst naar scherm sturen
BOOL bPrinterstatus; // controle voor teken naar printer sturen
BOOL bPagemode = TRUE; // controle voor pagemode aan/uit
BOOL bCapsstatus; // status van de caps lock toets
BOOL bClear0;
BOOL bJoystick = FALSE;
BOOL bMidi = FALSE;
JOYCAPS jc; // karakeristieken van het ding
JOYINFO ji, JoyRev; // huidige waarde en referentiewaarde
BOOL bJoy; // status of er een joystick is
unsigned char commandonr; // gebruikt voor opslag van commando nummer
unsigned char msb = 0xff; // controle bit voor bit7 wel of niet strippen
unsigned char kleur = 7; // tekst atribuut bij opstarten
unsigned char rvenster_ylo; // waarde in ini files
unsigned char rvenster_xrb; // waarde in de ini files
unsigned char venster_xlo =0; // coordinaten tekstvenster
unsigned char venster_ylo = 16; //
unsigned char venster_xrb=64; //
unsigned char venster_yrb = 0; //
unsigned int gwindow_xlo = 0; // coordinaten grafisch venster
unsigned int gwindow_ylo = 0; //
unsigned int gwindow_xrb = -1; //
unsigned int gwindow_yrb = -1; //
unsigned int oorsprong_x = 0; // offset voor grafische oorsprong
unsigned int oorsprong_y = 0; //
unsigned char schermpag = 0; // schermpagina nummer voor bewerking
unsigned char prnnr = 0; // nummer van geselecteerde printerpoort
unsigned char joystat; // de status van de bits als B000
unsigned char cenr; // critical errornummer
unsigned char adres_b000; // emulatie adres
unsigned char bEnd = FALSE; // nee, we zijn nog niet klaar
unsigned char bCursor = TRUE; // default wel een cursor
unsigned char scale_x=1, scale_y=1; // default vergroting
int rb_xco, rb_yco;
unsigned int iobase;
int xco=0, yco=0; // actuele cursor positie
BOOL bShift, bCaps, bCtrl;
BYTE bscan, bascii;
BYTE BitMapBits[24][1024];
HBITMAP hBitmap[24];
BITMAPINFOHEADER Bi;
LPBITMAPINFOHEADER lpbi;
HANDLE hDIB[24];
LPSTR lpstBitmap, lpstTemp;
BOOL bGraph = FALSE;
WORD j_l, j_r, j_b, j_o;
BOOL bPlane[24] = {
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE,
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE,
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE,
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE
};
// waarden voor de externe printroutine
extern PRINTINFOSTRUCT pis;
// waarden voor de handeling van de windows
HINSTANCE hInst; /* current instance */
PAINTSTRUCT ps ;
TEXTMETRIC tm ;
HFONT hFont;
HBRUSH hBrush;
RECT hRect;
HFONT hOldFont;
RECT Rect;
int Shape = SL_BLOCK; // shape to use for the selection
FARPROC lpProcAbout; // pointer to the "About" function
int cxIcon, cyIcon; // size of the icon
// waarden voor het bewerken van de ingekomen pagina
unsigned long kleurtbl[] = {
RGB( 0, 0, 0), // zwart
RGB(255, 0, 0), // rood
RGB( 0, 255, 0), // groen
RGB(255, 255, 0), // geel
RGB( 0, 0, 255), // blauw
RGB(255, 0, 255), // magenta
RGB( 0, 255, 255), // cyaan
RGB(255, 255, 255), // oewit
RGB(191, 191, 191), // oewit na twee keer in de dreft
};
// waarden voor het afhandelen van de cursor en de cursor positie
int cxChar, cyChar, cxClient, cyClient;
int x, y, i ;
// variabelen tbv DDE
char szAppName [] = "Watom";
char szTopic [] = "WATOM" ;
DWORD idInst ;
char scherm[50][99];
// variabelen voor de clipboard besturing
int xco_sto, yco_sto, xco_sta, yco_sta;
HDC hdcMem;
BITMAP Bitmap; // bitmap structure
BOOL bTrack;
int nHeight,
nWidth,
index;
unsigned int result;
int defver, defhor, defwidth, defheight;
// div zaken voor font
ABC abc[26];
int dHeight, dWidth;
HCURSOR hCursor;
int a=0x20;
FILE *prnfile;
HMIDIOUT hMidiOut ;
TIMECAPS tc ;
UINT nTimerID, nTimerRes ;
LPMIDISONG lpMidiSong ;
LPMIDIDATA lpMidiData, lpmd ;
HANDLE hGmem1 = NULL, hGmem2 = NULL ;
BYTE resettype=0;
long FAR PASCAL _export WndProc (HWND, UINT, UINT, LONG) ;
HWND hwnd ;
#pragma argsused
int PASCAL WinMain (HANDLE hInstance, HANDLE hPrevInstance,
LPSTR lpszCmdLine, int nCmdShow)
{
MSG msg ;
WNDCLASS wndclass ;
HMENU hMenu;
ReadProfile();
hInst = hInstance;
if (!hPrevInstance) {
wndclass.style = CS_CLASSDC;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInst ;
wndclass.hIcon = LoadIcon (hInst, IDI_APPLICATION) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject (BLACK_BRUSH) ;
wndclass.lpszMenuName = "AtomMenu";
wndclass.lpszClassName = szAppName ;
RegisterClass (&wndclass) ;
}
hwnd = CreateWindow (szAppName, "Atom Outside", WS_OVERLAPPEDWINDOW,
defhor, defver, defwidth, defheight,
// CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
NULL, NULL, hInstance, NULL) ;
if (hwnd) {
hMenu = GetSystemMenu (hwnd, FALSE); // Handle to sysmenu copy
AppendMenu (hMenu, MF_SEPARATOR, 0, NULL); // Append a separator line
AppendMenu (hMenu, MF_STRING, IDM_ABOUT, "&About..."); // Last item is About Box
hCursor = LoadCursor(hInstance, "Cursor_4");
ShowWindow (hwnd, nCmdShow) ;
bPrinterstatus = FALSE;
bSchermstatus = FALSE;
bPagemode = FALSE;
schermpag = 0;
RESET(iobase); // reset the atom
initerror(); // init de error tabellen
UpdateWindow (hwnd) ;
while (TRUE) {
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
if (msg.message == WM_QUIT)
break;
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
else {
result = READBYTE(iobase);
if (HIBYTE(result) == 0xff) {
Process(LOBYTE(result));
}
}
}
return msg.wParam ;
}
else
return FALSE;
}
#pragma argsused
long FAR PASCAL _export WndProc (HWND hWnd, UINT msg, UINT wParam, LONG lParam)
{
static POINT org;
static POINT len;
// var voor textcopyclipboard
int xx, yy;
HANDLE hGlobalMemory;
LPSTR lpGlobalMemory;
int wLength = 100;
HBITMAP hBitmap;
HDC hdc;
HMENU hMenu;
int nFiles, aantal;
char cBuf[128];
MSG usermsg;
DWORD bkcolor, fgcolor;
UINT nThreshold;
POINT ptCurrent;
JOYINFO ji;
static BOOL bJoyFirst = FALSE;
static JOYINFO jir ;
static unsigned long joyX, joyY;
switch (msg) {
case WM_CREATE:
Watom_OnCreate(hWnd, msg, wParam, lParam);
return 0 ;
case WM_DROPFILES:
nFiles = DragQueryFile((HDROP) wParam, (UINT) -1, NULL, 0);
for (i=0; i<nFiles; i++) {
char cmd[50];
char del = '"';
int j;
DragQueryFile((HDROP) wParam, i, cBuf, 128);
sprintf(cmd, "*LOAD %c%s%c", del, cBuf, del);
/* for (j=0; j< strlen(cmd); j++) {
SendMessage (hWnd, WM_KEYDOWN, cmd[j], 1L) ;
SendMessage (hWnd, WM_KEYUP, cmd[j], 1L) ;
Sendkeys
} */
MessageBox(hWnd, cmd, "debug", MB_OK);
}
DragFinish((HDROP) wParam);
return 0;
case WM_SIZE:
Watom_OnSize(hWnd, msg, wParam, lParam);
return 0 ;
case MM_JOY1MOVE:
if (bJoyFirst == FALSE) {
joyGetPos(JOYSTICKID1, &jir); // plaats referentiewaarde
joyX = jir.wXpos / 2;
joyY = jir.wYpos / 2;
bJoyFirst = TRUE;
}
joyGetPos(JOYSTICKID1, &ji); // kan ook vanuit wParam
joystat = 0xff; // alle bits aan
if (ji.wXpos < jir.wXpos - joyX) {
joystat &= 0xfd; // schoon als deze richting op
}
else if (ji.wXpos > jir.wXpos + joyX) {
joystat &= 0xf7;
}
if (ji.wYpos < jir.wYpos - joyY) {
joystat &= 0xef;
}
else if (ji.wYpos > jir.wYpos + joyY) {
joystat &= 0xfb;
}
if ((ji.wButtons & JOY_BUTTON1) == 1)
joystat &= 0xfe;
return 0;
case MM_JOY1BUTTONDOWN:
if (wParam & JOY_BUTTON1)
joystat |= 0x01;
return 0;
case MM_JOY1BUTTONUP:
if (!wParam & JOY_BUTTON1)
joystat &= 0xfe;
return 0;
case WM_PAINT:
Watom_OnPaint(hWnd, msg, wParam, lParam);
return 0 ;
case WM_MIDI: // convenient place to free memory blocks
if (hGmem1)
GlobalFree (hGmem1) ;
if (hGmem2)
GlobalFree (hGmem2) ;
hGmem1 = hGmem2 = NULL ;
return 0;
case WM_USER_CHAR:
aantal = (int) LOWORD (lParam);
for (i = 0 ; i < aantal; i++) {
if (bSchermstatus == TRUE) {
switch (wParam) {
case CTRL_H: // backspace
if (xco > venster_xlo) {
xco-- ;
}
else {
if (yco > venster_yrb) {
yco--;
xco = venster_xlo;
}
}
break ;
case CTRL_I: // stap naar rechts
if (xco < (venster_xrb-venster_xlo-1)) {
xco++;
break;
}
else
xco = venster_xlo;
// fall trhough
case CTRL_J: // stap naar beneden
if (yco < venster_ylo) {
yco++;
regels++;
}
else {
if (bPagemode == TRUE) {
if (regels >= (venster_ylo-venster_yrb)) {
// wacht op toest
while (TRUE) {
if (PeekMessage(&usermsg, NULL, 0, 0, PM_REMOVE)) {
if (usermsg.message == WM_CHAR)
break;
TranslateMessage (&usermsg) ;
DispatchMessage (&usermsg) ;
}
}
regels = 0;
}
}
for (y=venster_yrb+1; y<=venster_ylo; y++) {
memcpy(scherm[y-1], scherm[y], (venster_xrb-venster_xlo)+2);
}
memset(scherm[venster_ylo], ' ', (venster_xrb-venster_xlo)+1);
regels++;
HideCaret (hWnd) ;
hdc = GetDC(hWnd);
hOldFont =(HFONT)SelectObject(hdc, hFont);
bkcolor = GetBkColor(hdc);
fgcolor = GetTextColor(hdc);
SetBkColor(hdc, kleurtbl[0]);
SetTextColor(hdc, kleurtbl[7]);
for (i=0; i<=venster_ylo; i++) {
TextOut(hdc, 0, (i*dHeight), scherm[i], (venster_xrb-venster_xlo)+0);
}
SetBkColor(hdc, bkcolor);
SetTextColor(hdc, fgcolor);
SelectObject(hdc, hOldFont);
ShowCaret (hWnd) ;
ReleaseDC(hWnd, hdc);
}
break ;
case CTRL_K: // stap naar boven
if (yco > venster_yrb)
yco--;
break;
case CTRL_L: // schoon schip
memset(scherm[0], ' ', sizeof(scherm));
xco = 0 ;
yco = 0 ;
venster_xrb=rvenster_xrb;
venster_yrb=0;
venster_ylo=rvenster_ylo;
venster_xlo=0;
regels=0;
bClear0 = FALSE;
bGraph = FALSE;
// resettimers(hWnd);
PostMessage(hWnd, WM_SETFOCUS, 0, 0L);
InvalidateRect (hWnd, NULL, FALSE) ;
break ;
case CTRL_M : // carriage return
xco = venster_xlo;
break ;
case CTRL_N:
bPagemode=TRUE;
regels=0;
break;
case CTRL_O:
bPagemode=FALSE;
break;
case CTRL_P:
xco = venster_xlo;
yco = venster_ylo;
break;
case CTRL_U:
bSchermstatus=FALSE;
break;
case HOME:
xco = 0 ;
yco = 0 ;
break ;
default: // character codes
if (wParam >= ' ' && wParam !=127) {
scherm[yco][xco] = (char) wParam ;
HideCaret (hWnd) ;
hdc = GetDC (hWnd) ;
bkcolor = GetBkColor(hdc);
fgcolor = GetTextColor(hdc);
SetBkColor(hdc, kleurtbl[0]);
SetTextColor(hdc, kleurtbl[7]);
hOldFont =(HFONT)SelectObject(hdc, hFont);
TextOut (hdc, xco * dWidth, yco * dHeight, &scherm[yco] [xco], 1);
if (!bGraph) {
ShowCaret (hWnd) ;
}
SetBkColor(hdc, bkcolor);
SetTextColor(hdc, fgcolor);
SelectObject(hdc, hOldFont);
ReleaseDC (hWnd, hdc) ;
SendMessage (hWnd, WM_USER_CHAR, CTRL_I, 1L) ;
}
break;
}
}
if (bPrinterstatus) {
if (wParam > 31 || wParam == 0x0a || wParam == 0x0d)
fputc((char) wParam, prnfile);
}
SetCaretPos (xco * dWidth, yco * dHeight) ;
}
return 0 ;
case WM_TIMER:
case WM_TIMECHANGE:
Watom_OnTimer(hWnd, msg, wParam, lParam);
return 0 ;
case WM_SYSCOMMAND:
Watom_OnSysCommand(hWnd, msg, wParam, lParam);
return 0 ;
case WM_COMMAND:
Watom_OnCommand(hWnd, msg, wParam, lParam);
return 0 ;
case WM_DESTROY:
joyReleaseCapture(JOYSTICKID1);
Watom_OnDestroy(hWnd, msg, wParam, lParam);
return 0 ;
case WM_CHAR:
Watom_OnChar(hWnd, msg, wParam, lParam);
return 0 ;
case WM_KEYDOWN:
Watom_OnKeyDown(hWnd, msg, wParam, lParam);
return 0 ;
case WM_KEYUP:
Watom_OnKeyUp(hWnd, msg, wParam, lParam);
return 0 ;
case WM_INITMENU:
Watom_OnInitMenu(hWnd, msg, wParam, lParam);
return 0 ;
case WM_SETFOCUS:
// create and show the caret
if (!bGraph) {
hdc = GetDC(hWnd);
SetBkColor(hdc, kleurtbl[0]);
SetTextColor(hdc, kleurtbl[7]);
CreateCaret (hWnd, NULL, cxChar, cyChar) ;
SetCaretPos (xco * dWidth, yco * dHeight) ;
ShowCaret (hWnd) ;
ReleaseDC(hWnd, hdc);
}
if (bJoy) {
joySetCapture(hWnd, JOYSTICKID1, 100, TRUE);
}
return 0 ;
case WM_KILLFOCUS:
// hide and destroy the caret
HideCaret (hWnd) ;
if (bJoy)
joyReleaseCapture(JOYSTICKID1);
return 0 ;
case WM_LBUTTONDOWN: // message: left mouse button pressed
// Start selection of region
if (!bTrack) {
bTrack = TRUE;
org = MAKEPOINT(lParam);
SetCursor(hCursor);
SetRectEmpty(&Rect);
StartSelection(hWnd, MAKEPOINT(lParam), &Rect, (wParam & MK_SHIFT) );
}
return 0 ;
case WM_MOUSEMOVE: // message: mouse movement
// Update the selection region
if (bTrack) {
SetCursor(hCursor);
UpdateSelection(hWnd, MAKEPOINT(lParam), &Rect,
(wParam & MK_SHIFT) ? (SL_EXTEND | Shape) : Shape);
len = MAKEPOINT(lParam);
len.x -= org.x;
len.y -= org.y;
upd_status(hWnd);
}
return 0 ;
case WM_RBUTTONUP: // message: right mouse button released
ptCurrent = MAKEPOINT(lParam);
rb_xco = ptCurrent.x / dWidth + 0;
rb_yco = ptCurrent.y / dHeight + 0;
return 0;
case WM_LBUTTONUP: // message: left mouse button released
if (bTrack) {
SetCursor(LoadCursor(NULL, IDC_ARROW));
EndSelection(MAKEPOINT(lParam), &Rect);
ClearSelection(hWnd, &Rect, FALSE);
bTrack = FALSE;
}
hMenu = GetMenu(hWnd);
if (GetMenuState(hMenu, IDM_COPYSPEC, MF_CHECKED) ) {
if (xco_sta - xco_sto > 0) {
wLength = xco_sto;
xco_sto = xco_sta;
xco_sta = wLength;
}
if (yco_sta - yco_sto > 0) {
wLength = yco_sto;
yco_sto = yco_sta;
yco_sta = wLength;
}
wLength = (xco_sto - xco_sta + 1) * (yco_sto - yco_sta + 1)
+ (2 * (yco_sto - yco_sta+1));
hGlobalMemory = GlobalAlloc(GHND, (DWORD) wLength + 1);
lpGlobalMemory = GlobalLock(hGlobalMemory);
for (yy = yco_sta; yy<=yco_sto; yy++) {
for (xx = xco_sta; xx<=xco_sto; xx++) {
char ch;
ch = scherm[yy][xx] &0x7f;
if (ch<0x20)
ch = 0x20;
*lpGlobalMemory++ = ch;
}
*lpGlobalMemory++ = 0x0d;
*lpGlobalMemory++ = 0x0a;
}
GlobalUnlock(hGlobalMemory);
if (OpenClipboard(hWnd)) {
EmptyClipboard();
SetClipboardData(CF_TEXT, hGlobalMemory);
CloseClipboard();
InvalidateRect(hWnd, NULL, TRUE);
}
}
else {
int absx;
int absy;
int orgx;
int orgy;
int lenx;
int leny;
hdc = GetDC(hWnd);
if (xco_sta - xco_sto > 0) {
wLength = xco_sto;
xco_sto = xco_sta;
xco_sta = wLength;
}
if (yco - yco_sto > 0) {
wLength = yco_sto;
yco_sto = yco_sta;
yco_sta = wLength;
}
absx = abs(xco_sto-xco_sta) * dWidth;
absy = abs(yco_sto-yco_sta) * dHeight;
orgx = (xco_sta) * dWidth;
orgy = (yco_sta) * dHeight;
lenx = (xco_sto-xco_sta) * dWidth;
leny = (yco_sto-yco_sta) * dHeight;
if (lenx == 0 || leny == 0)
break;
hdcMem = CreateCompatibleDC(hdc);
hBitmap = CreateCompatibleBitmap(hdc, absx, absy);
if (hBitmap) {
SelectObject(hdcMem, hBitmap);
StretchBlt(hdcMem, 0, 0, absx, absy, hdc, orgx, orgy, lenx, leny, SRCCOPY);
OpenClipboard(hWnd);
EmptyClipboard();
SetClipboardData(CF_BITMAP, hBitmap);
CloseClipboard();
InvalidateRect(hWnd, NULL, TRUE);
}
else
MessageBox(hWnd, "Bitmap Error", "Memory", MB_OK);
DeleteDC(hdcMem);
ReleaseDC(hWnd, hdc);
}
return 0;
}
return (DefWindowProc(hWnd, msg, wParam, lParam));
}
#pragma argsused
BOOL FAR PASCAL About(HWND hWnd, unsigned message, WORD wParam, LONG lParam)
{
switch (message) {
case WM_INITDIALOG: /* message: initialize dialog box */
return (TRUE);
case WM_COMMAND: /* message: received a command */
if (wParam == IDOK /* "OK" box selected? */
|| wParam == IDCANCEL) { /* System menu close command? */
EndDialog(hWnd, TRUE); /* Exits the dialog box */
return (TRUE);
}
break;
}
return (FALSE); /* Didn't process a message */
}
#pragma argsused
void Watom_OnDestroy(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
OFSTRUCT of;
WORD wReturn;
char szBuf[144];
char szWorkpath[160];
wReturn = GetWindowsDirectory( (LPSTR) szBuf, sizeof (szBuf));
if (wReturn == 0)
MessageBox (hWnd, "function failed", "get Windows Directory", MB_OK);
else if (wReturn > sizeof(szBuf))
MessageBox (hWnd, "buffer is to small", "get Windows Directory", MB_OK);
strcpy(szWorkpath, szBuf);
strcat(szWorkpath, "\\atom.fot");
// had to keep around until app is done using the info
if (pis.hCurrDevMode != NULL)
GlobalFree(pis.hCurrDevMode);
// had to keep around until app is done using the info
if (pis.hCurrDevNames != NULL)
GlobalFree(pis.hCurrDevNames);
WriteProfile(GetActiveWindow());
DeleteObject(hFont);
RemoveFontResource((LPSTR) szWorkpath);
SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
OpenFile(szWorkpath, &of, OF_DELETE);
resettimer(hWnd);
if (bMidi == TRUE) {
SendMessage (hWnd, WM_MIDI, 0, 0L) ; // free memory
midiOutClose (hMidiOut) ;
}
PostQuitMessage(0);
}
#pragma argsused
void Watom_OnTimer(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
int i;
HDC hdc;
if (!bTrack) {
if (bGraph == TRUE) {
hdc = GetDC(hwnd);
for (i=0; i<24; i++) {
if (bPlane[i] == TRUE) {
SetDIBits(hdc, hBitmap[i], 0, 192, (LPSTR) BitMapBits[i], (LPBITMAPINFO) lpbi, DIB_RGB_COLORS);
DrawBitmap(hdc, hBitmap[i], 10, 10+(8*(24-i)));
bPlane[i]=FALSE;
}
}
}
ReleaseDC(hwnd, hdc);
}
return;
}
BOOL Watom_OnSysCommand(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (wParam) {
case IDM_ABOUT:
lpProcAbout = MakeProcInstance(About, hInst);
DialogBox(hInst, // current instance
"About", // resource to use
hWnd, // parent handle
lpProcAbout); // About() instance address
InvalidateRect(hWnd, NULL, FALSE);
UpdateWindow(hWnd);
FreeProcInstance(lpProcAbout);
return 0;
case SC_MAXIMIZE:
Watom_OnSize(hWnd, msg, wParam, lParam);
// fall through
}
return (DefWindowProc(hWnd, msg, wParam, lParam));
}
#pragma argsused
BOOL Watom_OnCommand(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
HMENU hMenu;
switch (wParam) {
case 202:
// allocate global blocks to hold data
hGmem1 = GlobalAlloc (GMEM_FIXED | GMEM_SHARE, sizeof (MIDISONG)) ;
hGmem2 = GlobalAlloc (GMEM_FIXED | GMEM_SHARE, 6 * sizeof (MIDIDATA)) ;
if (hGmem1 == NULL || hGmem2 == NULL) {
MessageBox (hWnd, "Could not allocate memory",
"Memory Error", MB_ICONHAND | MB_OK) ;
return 0 ;
}
lpMidiSong = (MIDISONG FAR *) GlobalLock (hGmem1) ;
lpMidiData = (MIDIDATA FAR *) GlobalLock (hGmem2) ;
lpmd = lpMidiData ;
for (i = 0 ; i < 6 ; i++) { // copy in some data
lpmd->dwTimeMs = MidiData[i].dwTimeMs ;
lpmd->dwMidiData = MidiData[i].dwMidiData ;
lpmd++ ;
}
lpMidiSong->dwEvents = 6 ; // init MIDISONG
lpMidiSong->dwLastEvent = 0 ;
lpMidiSong->dwTime = 0 ;
lpMidiSong->lpMidiData = lpMidiData ;
lpMidiSong->hMidiOut = hMidiOut ;
// start timer - callback does MIDI output
timeBeginPeriod (nTimerRes) ;
nTimerID = timeSetEvent (nTimerRes, nTimerRes, TimeCallback, (DWORD) (LPSTR) lpMidiSong,
TIME_PERIODIC) ;
if (nTimerID == NULL) {
MessageBox (hWnd, "Could not start timer.", "Message", MB_OK) ;
}
break;
case IDM_COPYSPEC:
hMenu=GetMenu(hWnd);
if (GetMenuState(hMenu, IDM_COPYSPEC, MF_CHECKED) ) {
CheckMenuItem(hMenu, IDM_COPYSPEC, MF_UNCHECKED);
}
else {
CheckMenuItem(hMenu, IDM_COPYSPEC, MF_CHECKED);
}
break;
case IDM_PRINT:
ShowPrintBox(hWnd);
break;
case IDM_PRINTSETUP:
ShowPrintSetup(hWnd);
break;
case IDM_EXIT:
SendMessage(hWnd, WM_CLOSE, 0, 0L);
break;
case IDM_RESET:
RESET(iobase);
break;
}
return TRUE;
}
#pragma argsused
void Watom_OnPaint(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
RECT hRect, hBox;
HBRUSH hBrush;
DWORD bkcolor, fgcolor;
HDC hdc;
if (!bTrack) {
hdc = BeginPaint(hWnd, &ps);
if (IsIconic(hWnd) ) {
nWidth = 3; // cxIcon / (venster_xrb) + 1; // grootte van het icon
nHeight = 3; // cyIcon / (venster_ylo+1) + 1; // idem
DeleteObject(hFont);
Createfnt(hWnd);
}
else {
hBrush = CreateSolidBrush(kleurtbl[8]);
GetClientRect(hWnd, &hRect);
hRect.top = hRect.bottom - 26;
FillRect(hdc, &hRect, hBrush);
DeleteObject(hBrush);
hBox.top = hRect.top +1;
hBox.bottom = hRect.bottom -1;
hBox.left = hRect.left +1;
hBox.right = hRect.right +1;
MakeBox(hdc, hBox);
hBox.left = hRect.left + 105;
hBox.right = hRect.left + 1;
MakeBox(hdc, hBox);
hBox.left = hRect.left + 150;
hBox.right = hRect.right- 1;
MakeBox(hdc, hBox);
upd_status(hWnd);
}
if (bGraph) {
int i;
for (i=0; i<24; i++) {
DrawBitmap(ps.hdc, hBitmap[i], 10, 10+(8*(24-i)));
}
}
else {
hOldFont =(HFONT)SelectObject(hdc, hFont);
bkcolor = GetBkColor(hdc);
fgcolor = GetTextColor(hdc);
SetBkColor(hdc, kleurtbl[0]);
SetTextColor(hdc, kleurtbl[7]);
for (i=0; i<=venster_ylo; i++) {
TextOut(hdc, 0, (i*dHeight), scherm[i], (venster_xrb-venster_xlo)+0);
}
SetBkColor(hdc, bkcolor);
SetTextColor(hdc, fgcolor);
SelectObject(hdc, hOldFont);
if (!IsIconic(hWnd) ) {
SelectObject (hdc, hFont) ;
SetBkColor(hdc, kleurtbl[0]);
SetTextColor(hdc, kleurtbl[7]);
}
}
EndPaint(hWnd, &ps);
}
}
#pragma argsused
void Watom_OnSize(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
hdc = GetDC(hWnd);
SetBkColor(hdc, kleurtbl[0]);
SetTextColor(hdc, kleurtbl[7]);
cxClient = LOWORD (lParam) ;
cyClient = HIWORD (lParam) ;
GetWindowRect(hWnd, &hRect);
defver = hRect.left;
defhor = hRect.top;
defwidth = hRect.right;
defheight = hRect.bottom;
cxChar = nWidth = cxClient / venster_xrb;
cyChar = nHeight = (cyClient-30) / (venster_ylo + 1);
DeleteObject(hFont);
Createfnt(hWnd);
// calculate window size in characters
if (hWnd == GetFocus ()) {
CreateCaret (hWnd, NULL, cxChar, cyChar) ;
SetCaretPos (xco * cxChar, yco * cyChar) ;
}
PostMessage(hWnd, WM_SETFOCUS, 0, 0L);
ReleaseDC(hWnd, hdc);
InvalidateRect(hWnd, NULL, TRUE);
}
#pragma argsused
void Watom_OnCreate(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
int nFontload;
BOOL bStatus;
OFSTRUCT of;
WORD wReturn;
char szBuf[144];
char szFontpath[160];
char szWorkpath[160];
HDC hdc;
DragAcceptFiles(hWnd, TRUE);
if (bJoystick == TRUE) {
if (joyGetNumDevs() >=1 && joyGetPos(JOYSTICKID1, &ji) != JOYERR_UNPLUGGED) {
joyGetDevCaps(JOYSTICKID1, &jc, sizeof(JOYCAPS));
bJoy = TRUE;
joySetThreshold(JOYSTICKID1, 128);
if (jc.wXmax > 32000 || jc.wYmax > 32000) {
jc.wXmax = 16000;
jc.wYmax = 16000;
}
}
else {
MessageBox(hWnd, "Geen joystick aanwezig op het systeem", "Melding", MB_ICONHAND | MB_OK);
bJoy = FALSE;
}
}
if (bMidi == TRUE) {
int nStatus;
HINSTANCE hInstance;
char cBuf[90];
if (midiOutGetNumDevs () == 0) { // check if MIDI OK
MessageBox (hWnd, "No MIDI output device found.",
"Not Installed?", MB_ICONHAND | MB_OK) ;
return ;
}
hInstance = (HINSTANCE)GetWindowWord (hWnd, GWW_HINSTANCE) ;
nStatus = midiOutOpen (&hMidiOut, (UINT) MIDI_MAPPER,
(DWORD) MidiOutCall, (DWORD) hInstance, CALLBACK_FUNCTION) ;
if (nStatus != 0) {
midiOutGetErrorText (nStatus, cBuf, 256) ;
MessageBox (hWnd, cBuf, "MIDI Error", MB_ICONHAND | MB_OK) ;
return ;
}
nStatus = timeGetDevCaps (&tc, sizeof (TIMECAPS)) ;
if (nStatus == TIMERR_NOCANDO) {
MessageBox (hWnd, "MM timer not found - terminating.",
"Error", MB_OK | MB_ICONHAND) ;
DestroyWindow (hWnd) ;
}
// find resolution closest to 1 millisecond
nTimerRes = min (max (tc.wPeriodMin, 1), tc.wPeriodMax) ;
} // einde bMidi
wReturn = GetSystemDirectory( (LPSTR) szBuf, sizeof (szBuf));
if (wReturn == 0)
MessageBox (hWnd, "function failed", "get System Directory", MB_OK);
else if (wReturn > sizeof(szBuf))
MessageBox (hWnd, "buffer is to small", "get System Directory", MB_OK);
strcpy(szFontpath, szBuf);
strcat(szFontpath, "\\atom.ttf");
wReturn = GetWindowsDirectory( (LPSTR) szBuf, sizeof (szBuf));
if (wReturn == 0)
MessageBox (hWnd, "function failed", "get Windows Directory", MB_OK);
else if (wReturn > sizeof(szBuf))
MessageBox (hWnd, "buffer is to small", "get Windows Directory", MB_OK);
settimers(hWnd);
strcpy(szWorkpath, szBuf);
strcat(szWorkpath, "\\atom.fot");
pis.hCurrDevMode = NULL;
pis.hCurrDevNames = NULL;
pis.hPrinterFont = NULL;
GetClientRect(hWnd, &hRect);
hdc = GetDC (hWnd) ;
Bi.biSize = sizeof(BITMAPINFOHEADER);
Bi.biWidth = 256;
Bi.biHeight = 8;
Bi.biPlanes = 1;
Bi.biBitCount = 4;
Bi.biCompression = BI_RGB;
Bi.biSizeImage = 256 * 8;
Bi.biXPelsPerMeter = 0;
Bi.biYPelsPerMeter = 0;
Bi.biClrUsed = 0;
Bi.biClrImportant = 0;
for (i=0; i<24; i++) {
hBitmap[i] = CreateDIBitmap(hdc, &Bi, 0L, NULL, NULL, 0);
hDIB[i] = GlobalAlloc(GHND, sizeof(BITMAPINFOHEADER) + 16 * sizeof(RGBQUAD));
lpbi = (BITMAPINFOHEADER FAR *)GlobalLock(hDIB[i]);
*lpbi = Bi;
GetDIBits(hdc, hBitmap[i], 0, 50, NULL, (LPBITMAPINFO) lpbi, DIB_RGB_COLORS);
GlobalUnlock(hDIB[i]);
}
// SetMapMode(hdc, MM_ANISOTROPIC);
// SetWindowExt(hdc, 1440, 1440);
// SetViewportExt(hdc, GetDeviceCaps(hdc, LOGPIXELSX), GetDeviceCaps(hdc, LOGPIXELSY));
nWidth = hRect.right / venster_xrb;
nHeight = (hRect.bottom-30) / (venster_ylo + 1);
GetClientRect(hWnd, &hRect);
OpenFile(szWorkpath, &of, OF_DELETE);
bStatus = CreateScalableFontResource(0, szWorkpath, szFontpath, NULL);
if (!bStatus)
MessageBox(hWnd, "Scalable Font niet te laden", "Warning", MB_ICONHAND | MB_OK);
else {
nFontload = AddFontResource((LPSTR) szWorkpath);
if (!nFontload)
MessageBox(hWnd, "Font niet te laden", "Warning", MB_ICONHAND | MB_OK);
else
SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
}
Createfnt(hWnd);
SelectObject (hdc, hFont) ;
GetTextMetrics (hdc, &tm) ;
cxChar = tm.tmAveCharWidth;
cyChar = (cyClient-30) / (venster_ylo+1);
cxIcon = GetSystemMetrics(SM_CXICON);
cyIcon = GetSystemMetrics(SM_CYICON);
ReleaseDC(hWnd, hdc) ;
}
#pragma argsused
void Watom_OnChar(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
bKey = TRUE;
bascii = LOWORD(wParam);
bscan = HIWORD(lParam) & 0xff;
}
#pragma argsused
void Watom_OnInitMenu(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
HMENU hMenu = (HMENU) wParam;
if (hMenu == GetMenu(hWnd)) {
if ((yco == yco_sto)&& yco_sto !=0)
EnableMenuItem(hMenu, IDM_DDE, MF_ENABLED);
else
EnableMenuItem(hMenu, IDM_DDE, MF_GRAYED);
}
}
#pragma argsused
void Watom_OnKeyDown(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
switch (wParam) {
case VK_END:
break ;
case VK_LEFT:
SendMessage (hWnd, WM_USER_CHAR, CTRL_H, 1L) ;
break ;
case VK_RIGHT:
SendMessage (hWnd, WM_USER_CHAR, CTRL_I, 1L) ;
break ;
case VK_DOWN:
SendMessage (hWnd, WM_USER_CHAR, CTRL_J, 1L) ;
break ;
case VK_UP:
SendMessage (hWnd, WM_USER_CHAR, CTRL_K, 1L) ;
break ;
case VK_BACK:
if (xco >0) {
SendMessage (hWnd, WM_USER_CHAR, CTRL_H, 1L) ;
SendMessage (hWnd, WM_USER_CHAR, ' ', 1L) ;
SendMessage (hWnd, WM_USER_CHAR, CTRL_H, 1L) ;
}
break;
}
readkeys();
upd_status(hWnd);
}
#pragma argsused
void Watom_OnKeyUp(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
readkeys();
upd_status(hWnd);
}
void Createfnt(HWND hWnd)
{
TEXTMETRIC tm;
HFONT hTmpfnt;
LOGFONT hLogFont;
HDC hdc;
if (nHeight==0)
nHeight=3;
hTmpfnt = CreateFont( nHeight,
0,
0, // no sloping
0, // no escaping
FW_NORMAL, // dik is in
FALSE, // geen italic
FALSE, // geen streep er onder
FALSE, // geen doorhaling
0,
OUT_RASTER_PRECIS,
CLIP_STROKE_PRECIS,
PROOF_QUALITY,
FIXED_PITCH,
"RLatom"
);
hdc = GetDC(hWnd);
hOldFont =(HFONT)SelectObject(hdc, hTmpfnt);
GetTextMetrics(hdc, &tm);
hLogFont.lfHeight = -tm.tmHeight;
hLogFont.lfWidth = nWidth;
hLogFont.lfWeight = tm.tmWeight;
hLogFont.lfEscapement = 0;
hLogFont.lfOrientation = 0;
hLogFont.lfItalic = FALSE;
hLogFont.lfUnderline = FALSE;
hLogFont.lfStrikeOut = FALSE;
hLogFont.lfCharSet = ANSI_CHARSET;
hLogFont.lfOutPrecision = OUT_RASTER_PRECIS,
hLogFont.lfClipPrecision = CLIP_STROKE_PRECIS,
hLogFont.lfQuality = PROOF_QUALITY;
hLogFont.lfPitchAndFamily = FIXED_PITCH,
strcpy(hLogFont.lfFaceName, "RLatom");
hFont = CreateFontIndirect(&hLogFont);
DeleteObject(hTmpfnt);
SelectObject(hdc, hFont);
GetTextMetrics(hdc, &tm);
dHeight = tm.tmDescent + tm.tmAscent - tm.tmInternalLeading;
GetCharABCWidths(hdc, (UINT) 'a', (UINT) 'z', (LPABC) &abc);
dWidth = nWidth = (abc['b' - 'a'].abcA + abc['b' - 'a'].abcB + abc['b' - 'a'].abcC);
SelectObject(hdc, hOldFont);
ReleaseDC(hWnd, hdc);
}
void ReadProfile()
{
defver = GetPrivateProfileInt("Position", "defver", -1, "WinAtom.ini");
defhor = GetPrivateProfileInt("Position", "defhor", -1, "WinAtom.ini");
defwidth = GetPrivateProfileInt("Position", "defwidth", -1, "WinAtom.ini");
defheight = GetPrivateProfileInt("Position", "defheight", -1, "WinAtom.ini");
rvenster_xrb = GetPrivateProfileInt("TermSize", "Xwidth", -1, "WinAtom.ini");
rvenster_ylo = GetPrivateProfileInt("TermSize", "Yheight", -1, "WinAtom.ini");
iobase = GetPrivateProfileInt("BaseAdress", "IO", -1, "WinAtom.ini");
bJoystick = GetPrivateProfileInt("MultiMed", "joy", -1, "WinAtom.ini");
bMidi = GetPrivateProfileInt("MultiMed", "midi", -1, "WinAtom.ini");
if (rvenster_ylo > 50) rvenster_ylo = 25;
if (rvenster_xrb > 132) rvenster_xrb = 64;
if (rvenster_ylo<1) rvenster_ylo = 25;
if (rvenster_xrb <20) rvenster_xrb = 64;
venster_xrb = rvenster_xrb;
venster_ylo = rvenster_ylo;
}
void WriteProfile()
{
char ascii[9];
itoa(defver, ascii, 10);
WritePrivateProfileString("Position", "defver", ascii, "WinAtom.ini");
itoa(defhor, ascii, 10);
WritePrivateProfileString("Position", "defhor", ascii, "WinAtom.ini");
itoa(defwidth, ascii, 10);
WritePrivateProfileString("Position", "defwidth", ascii, "WinAtom.ini");
itoa(defheight, ascii, 10);
WritePrivateProfileString("Position", "defheight", ascii, "WinAtom.ini");
itoa(venster_xrb, ascii, 10);
WritePrivateProfileString("TermSize", "Xwidth", ascii, "WinAtom.ini");
itoa(venster_ylo, ascii, 10);
WritePrivateProfileString("TermSize", "Yheight", ascii, "WinAtom.ini");
itoa(iobase, ascii, 10);
WritePrivateProfileString("BaseAdress", "IO", ascii, "WinAtom.ini");
itoa(bJoystick, ascii, 10);
WritePrivateProfileString("MultiMed", "joy", ascii, "WinAtom.ini");
itoa(bMidi, ascii, 10);
WritePrivateProfileString("MultiMed", "midi", ascii, "WinAtom.ini");
}
void MakeBox(HDC hdc, RECT hRect)
{
HBRUSH hBrush;
hRect.top +=3;
hRect.left +=3;
hRect.bottom -=2;
hRect.right -=2;
hBrush = CreateSolidBrush(kleurtbl[0]);
FrameRect(hdc, &hRect, hBrush);
DeleteObject(hBrush);
hRect.top -=1;
hRect.left -=1;
hBrush = CreateSolidBrush(kleurtbl[7]);
FrameRect(hdc, &hRect, hBrush);
hRect.top -=1;
hRect.left -=1;
hRect.bottom -=1;
hRect.right -=1;
FrameRect(hdc, &hRect, hBrush);
DeleteObject(hBrush);
}
void upd_status(HWND hWnd)
{
RECT hRect;
char s[99];
char t[99]; // 12345678901
char space[] = " ";
HDC hdc;
DWORD bkcolor, fgcolor;
if (!IsIconic(hWnd) ) {
sprintf (s, "%2d.%2d:%2d.%2d", xco_sta, yco_sta, xco_sto, yco_sto);
GetClientRect(hWnd, &hRect);
hdc = GetDC(hWnd);
bkcolor = GetBkColor(hdc);
fgcolor = GetTextColor(hdc);
SelectObject (hdc, GetStockObject (SYSTEM_FIXED_FONT)) ;
SetBkMode(hdc, OPAQUE);
SetBkColor(hdc, kleurtbl[8]);
SetTextColor(hdc, kleurtbl[0]);
if (bTrack)
TextOut(hdc, hRect.left+4, hRect.bottom - 20, s, strlen(s));
else
TextOut(hdc, hRect.left+4, hRect.bottom - 20, space, strlen(space));
readkeys();
if (bShift) strcpy(t, "SHIFT ");
else strcpy(t, "shift ");
if (bPagemode) strcat(t, "PAGEMODE ");
else strcat(t, "pagemode ");
if (bCaps) strcat(t, "CAPS ");
else strcat(t, "caps ");
if (bPrinterstatus) strcat(t, "PRINTER ");
else strcat(t, "printer ");
if (bSchermstatus) strcat(t, "SCHERM ");
else strcat(t, "scherm ");
if (bJoystick) strcat(t, "JOY ");
else strcat(t, "joy ");
if (bMidi) strcat(t, "MIDI");
else strcat(t, "midi");
// sprintf(s, "regels: %d", regels);
// strcat(t, s);
TextOut(hdc, hRect.left+170, hRect.bottom - 20, t, strlen(t));
SetBkColor(hdc, bkcolor);
SetTextColor(hdc, fgcolor);
ReleaseDC(hWnd, hdc);
}
}
void Process(char result)
{
int result1;
static int k = 32;
// result = k++;
if (k>255) k=32;
switch (result) {
case 0:
result1=READBYTEW(iobase);
/* if (result1 != DRUKAF && result1 != 0x5d) {
char tekst[80];
sprintf(tekst, "commando: %02x", result1);
MessageBox(0, tekst, "debug", MB_OK);
} */
switch (result1) {
case DRUKAF:
drukaf();
break;
case KEY:
keyb();
break;
case COPY:
copy();
break;
case GPLOT:
gplot();
break;
case IGRAPH:
igraph();
break;
case SIMULATE4:
simulate4();
break;
case RAMFNT:
ramfnt();
break;
case SCHRIJF:
schrijf();
break;
case SCHAAL:
schaal();
break;
case CURSOR_ON:
cursor_on();
break;
case CURSOR_OFF:
cursor_off();
break;
case LOADFILE:
loadfile();
break;
case SAVEFILE:
savefile();
break;
case CAT:
cat();
break;
case ACHDIR:
achdir();
break;
case ARMDIR:
armdir();
break;
case AMKDIR:
amkdir();
break;
case DELETE:
delete();
break;
case LOCK:
alock();
break;
case UNLOCK:
aunlock();
break;
case ADRIVE:
adrive();
break;
case MSDOS:
PostQuitMessage(0);
// msdos();
break;
case HIDE:
hide();
break;
case UNHIDE:
unhide();
break;
case INFO:
info();
break;
case GELUID:
geluid();
break;
case BLIEP:
bliep();
break;
case ERRMSG:
errmsg();
break;
case KNAAGDIER:
knaagdier();
break;
case DEFMUISMASKER:
defmuismasker();
break;
case CURSORPOS:
cursorpos();
break;
case VIDEO:
video();
break;
case SERPORT:
serport();
break;
case PRINTIT:
printit();
break;
case DOSFUNCTIE:
dosfunctie();
break;
case PORT_IN:
port_in();
break;
case PORT_OUT:
port_out();
break;
case UDS:
uds();
break;
case MOUSE_MOT:
mouse_mot();
break;
case WHOAMI:
whoami();
break;
case CLEAR0:
clear0();
break;
case PALET:
palet();
break;
case CLEAR1:
clear1();
break;
case CLEAR1A:
clear1a();
break;
case CLEAR2:
clear2();
break;
case CLEAR2A:
clear2a();
break;
case CLEAR3:
clear3();
break;
case CLEAR3A:
clear3a();
break;
case CLEAR4:
clear4();
break;
case CLEAR4A:
clear4a();
break;
case VIDEOMOD:
videomod();
break;
case VIDEOCOL:
videocol();
break;
case SCHRIJFPIX:
schrijfpix();
break;
case WINDOW:
windowd();
break;
case WINDOW_OFF:
window_off();
break;
case JOYSTICK:
joystick();
break;
case CALLIBRATE:
callibrate();
break;
case BIT7:
bit7();
break;
case BIOSKEY:
bioskey();
break;
case SHELL:
shell();
break;
case ZOEKFILE:
cat();
// zoekfile();
break;
case ZOEKNEXT:
zoeknext();
break;
case LPT:
lpt();
break;
case RAF_OPEN:
raf_open();
break;
case RAF_SLUIT:
raf_sluit();
break;
case RAF_SCHRIJF:
raf_schrijf();
break;
case RAF_LEZEN:
raf_lezen();
break;
case RAF_MOVE_PTR:
raf_move_ptr();
break;
case RAF_LEES_EXT:
raf_lees_ext();
break;
case MOUSEKAR:
mousekar();
break;
case VERSIE:
versie();
break;
case TEKEN2LPT:
teken2lpt();
break;
case CGABITMAP:
cgabitmap();
break;
case HFILL:
hfill();
break;
case VFILL:
vfill();
break;
case ROEP61:
roep61();
break;
case GWINDOW:
gwindow();
break;
case GWOFF:
gwoff();
break;
case OORSPRONG:
oorsprong();
break;
case VIEWSCHERM:
viewscherm();
break;
case WERKSCHERM:
werkscherm();
break;
case CURSORDEF:
cursordef();
break;
case READ_B001:
read_b001(0x00);
break;
case READ_B002:
read_b002();
break;
case WRITE_B000:
write_b000();
break;
case EGAFONT:
egafont();
break;
case EGA8X14:
ega8x14();
break;
case EGA8X8:
ega8x8();
break;
case PUTWIN: // putwin
putwin();
break;
case GETWIN:
getwin();
break;
case SHAPES: // shapes
shapes();
break;
case DIR_VID_ACC: // dir_vid_acc
dir_vid_acc();
break;
case KOPYPAGE:
kopypage();
break;
case ASCII_SCAN:
ascii_scan();
break;
case WAIT:
wait();
break;
case PAINT:
paint();
break;
case INIT0:
init0();
break;
default:
PrintError(result);
break;
}
break;
case CTRL_A:
teken2lpt();
break;
case CTRL_B:
if (bPrinterstatus == FALSE) {
if ((prnfile = fopen("pc-atom.spl", "ab+")) == NULL) {
MessageBox(0, "Error", "Cannot open spoolfile", MB_OK);
}
else {
bPrinterstatus = TRUE;
}
}
break;
case CTRL_C:
if (bPrinterstatus == TRUE) {
fclose(prnfile);
bPrinterstatus = FALSE;
}
break;
case CTRL_D:
viewscherm();
break;
case CTRL_E:
werkscherm();
break;
case CTRL_F:
bSchermstatus = TRUE;
upd_status(hwnd);
break;
case CTRL_G:
MessageBeep(0);
break;
case CTRL_H:
// STAPJE TERUG
SendMessage (hwnd, WM_USER_CHAR, CTRL_H, 1L) ;
break;
case CTRL_I:
// stapje naar rechts
SendMessage (hwnd, WM_USER_CHAR, CTRL_I, 1L) ;
break;
case CTRL_J:
// stapje naar beneden
// regels++;
SendMessage (hwnd, WM_USER_CHAR, CTRL_J, 1L) ;
break;
case CTRL_K:
// stapje naar boven
SendMessage (hwnd, WM_USER_CHAR, CTRL_K, 1L) ;
break;
case CTRL_L:
// wash my window
SendMessage (hwnd, WM_USER_CHAR, CTRL_L, 1L) ;
break;
case CTRL_M:
// next line
SendMessage (hwnd, WM_USER_CHAR, CTRL_M, 1L) ;
break;
case CTRL_N:
// pagemode aan
bPagemode = TRUE;
regels = 0;
break;
case CTRL_O:
// pagemode uit
bPagemode = FALSE;
break;
case CTRL_P:
xco = venster_xlo;
yco = venster_ylo;
// gotoxy(sdf.asdf);
break;
case CTRL_Q:
videocol();
break;
case CTRL_U:
// scherm uit
bSchermstatus = FALSE;
upd_status(hwnd);
break;
case CTRL_V:
videomod();
break;
case CTRL_W:
cgabitmap();
break;
case CTRL_X:
gwindow();
break;
case CTRL_Z:
// gwindowoff();
windowd();
break;
case CTRL_KM:
windowd();
break;
case CTRL_MN:
oorsprong();
break;
case HOME:
SendMessage (hwnd, WM_USER_CHAR, HOME, 1L) ;
break;
case CTRL_SL:
// heel verhaal
// zetcursor();
break;
default:
SendMessage (hwnd, WM_USER_CHAR, result, 1L) ;
break;
}
}
void readkeys()
{
unsigned int nShift, nCaps, nCtrl;
nShift = GetKeyState(VK_SHIFT);
nCtrl = GetKeyState(VK_CONTROL);
nCaps = GetKeyState(VK_CAPITAL);
if ((nShift & 0x8000) == 0x8000)
bShift = TRUE;
else
bShift = FALSE;
if ((nCtrl & 0x8000) == 0x8000)
bCtrl = TRUE;
else
bCtrl = FALSE;
if ((nCaps & 0x8000) == 0x8000) {
bCaps = nCaps & 0x0001;
}
}
void DrawBitmap(HDC hdc, HBITMAP hBitmap, short xStart, short yStart)
{
BITMAP bm;
HDC hMemDC;
POINT ptSize, ptOrg;
hMemDC = CreateCompatibleDC(hdc);
SelectObject(hMemDC, hBitmap);
SetMapMode(hMemDC, GetMapMode(hdc));
GetObject(hBitmap, sizeof(BITMAP), (LPSTR) &bm);
ptSize.x = bm.bmWidth;
ptSize.y = bm.bmHeight;
DPtoLP(hdc, &ptSize, 1);
ptOrg.x = 0;
ptOrg.y = 0;
DPtoLP(hMemDC, &ptOrg, 1);
BitBlt(hdc, xStart, yStart, ptSize.x, ptSize.y, hMemDC, ptOrg.x, ptOrg.y, SRCCOPY);
DeleteDC(hMemDC);
}
void paintclear0(int xco, int yco, BYTE waarde)
{
HDC hdc;
DWORD bkcolor, fgcolor;
scherm[yco][xco] = waarde;
hdc = GetDC (hwnd) ;
bkcolor = GetBkColor(hdc);
fgcolor = GetTextColor(hdc);
SetBkColor(hdc, kleurtbl[0]);
SetTextColor(hdc, kleurtbl[7]);
hOldFont =(HFONT)SelectObject(hdc, hFont);
TextOut (hdc, xco * dWidth, yco * dHeight, &waarde, 1);
SetBkColor(hdc, bkcolor);
SetTextColor(hdc, fgcolor);
SelectObject(hdc, hOldFont);
ReleaseDC (hwnd, hdc) ;
}