From 26d778c4ace3323ca129fdbc0aadb5690560bbe4 Mon Sep 17 00:00:00 2001 From: Rick Parrish Date: Fri, 8 Feb 2013 18:55:58 -0500 Subject: [PATCH] More REETODOs handled. Down to 14 in COMMON4 In theory Renegade should now work in local mode since the 14 items in COMMON4 are all comm related. I don't have v1.19 installed to test with though, so can't confirm. --- SOURCE/BOOT.PAS | 11 ++-- SOURCE/COMMON.PAS | 80 ++++++++++++++++++++-- SOURCE/COMMON2.PAS | 21 ++++-- SOURCE/COMMON3.PAS | 14 +++- SOURCE/LINECHAT.PAS | 11 +++- SOURCE/MYIO.PAS | 18 ++++- SOURCE/RPSCREEN.PAS | 157 ++++++++++++++++++++++++++++++++++++++++++++ SOURCE/WFCMENU.PAS | 8 +-- 8 files changed, 294 insertions(+), 26 deletions(-) create mode 100644 SOURCE/RPSCREEN.PAS diff --git a/SOURCE/BOOT.PAS b/SOURCE/BOOT.PAS index a14fa0d..2d6d3be 100644 --- a/SOURCE/BOOT.PAS +++ b/SOURCE/BOOT.PAS @@ -862,7 +862,8 @@ VAR {$IFDEF WIN32} FUNCTION TrueDosVer(VAR WinNTOk: Boolean): Word; BEGIN - WriteLn('REETODO BOOT TrueDosVer'); Halt; + WinNtOK := TRUE; + TrueDosVer := 5; END; {$ENDIF} @@ -888,7 +889,9 @@ VAR {$IFDEF WIN32} FUNCTION DosVer(VAR Minor,OS2Ver: Word): Word; BEGIN - WriteLn('REETODO BOOT DosVer'); Halt; + Minor := 0; + OS2Ver := 0; + DosVer := 5; END; {$ENDIF} @@ -911,7 +914,7 @@ VAR {$IFDEF WIN32} FUNCTION Win3_Check_On: Boolean; BEGIN - WriteLn('REETODO BOOT Win3_Check_On'); Halt; + Win3_Check_On := FALSE; END; {$ENDIF} @@ -937,7 +940,7 @@ VAR {$IFDEF WIN32} FUNCTION DV_Check_On: Boolean; BEGIN - WriteLn('REETODO BOOT DV_Check_On'); Halt; + DV_Check_On := FALSE; END; {$ENDIF} diff --git a/SOURCE/COMMON.PAS b/SOURCE/COMMON.PAS index b95e1fd..89966da 100644 --- a/SOURCE/COMMON.PAS +++ b/SOURCE/COMMON.PAS @@ -668,10 +668,13 @@ USES File11, Mail0, MultNode, +{$IFDEF MSDOS} SpawnO, +{$ENDIF} SysOp12, Vote {$IFDEF WIN32} + ,VPSysLow ,VPUtils ,Windows {$ENDIF} @@ -694,9 +697,72 @@ FUNCTION UpdateCRC32(CRC: LongInt; VAR Buffer; Len: Word): LongInt; EXTERNAL; {$L CRC32.OBJ } {$ENDIF} {$IFDEF WIN32} +CONST + CRC_32_TAB : array[0..255] of LongInt = ( + $00000000, $77073096, $ee0e612c, $990951ba, $076dc419, + $706af48f, $e963a535, $9e6495a3, $0edb8832, $79dcb8a4, + $e0d5e91e, $97d2d988, $09b64c2b, $7eb17cbd, $e7b82d07, + $90bf1d91, $1db71064, $6ab020f2, $f3b97148, $84be41de, + $1adad47d, $6ddde4eb, $f4d4b551, $83d385c7, $136c9856, + $646ba8c0, $fd62f97a, $8a65c9ec, $14015c4f, $63066cd9, + $fa0f3d63, $8d080df5, $3b6e20c8, $4c69105e, $d56041e4, + $a2677172, $3c03e4d1, $4b04d447, $d20d85fd, $a50ab56b, + $35b5a8fa, $42b2986c, $dbbbc9d6, $acbcf940, $32d86ce3, + $45df5c75, $dcd60dcf, $abd13d59, $26d930ac, $51de003a, + $c8d75180, $bfd06116, $21b4f4b5, $56b3c423, $cfba9599, + $b8bda50f, $2802b89e, $5f058808, $c60cd9b2, $b10be924, + $2f6f7c87, $58684c11, $c1611dab, $b6662d3d, $76dc4190, + $01db7106, $98d220bc, $efd5102a, $71b18589, $06b6b51f, + $9fbfe4a5, $e8b8d433, $7807c9a2, $0f00f934, $9609a88e, + $e10e9818, $7f6a0dbb, $086d3d2d, $91646c97, $e6635c01, + $6b6b51f4, $1c6c6162, $856530d8, $f262004e, $6c0695ed, + $1b01a57b, $8208f4c1, $f50fc457, $65b0d9c6, $12b7e950, + $8bbeb8ea, $fcb9887c, $62dd1ddf, $15da2d49, $8cd37cf3, + $fbd44c65, $4db26158, $3ab551ce, $a3bc0074, $d4bb30e2, + $4adfa541, $3dd895d7, $a4d1c46d, $d3d6f4fb, $4369e96a, + $346ed9fc, $ad678846, $da60b8d0, $44042d73, $33031de5, + $aa0a4c5f, $dd0d7cc9, $5005713c, $270241aa, $be0b1010, + $c90c2086, $5768b525, $206f85b3, $b966d409, $ce61e49f, + $5edef90e, $29d9c998, $b0d09822, $c7d7a8b4, $59b33d17, + $2eb40d81, $b7bd5c3b, $c0ba6cad, $edb88320, $9abfb3b6, + $03b6e20c, $74b1d29a, $ead54739, $9dd277af, $04db2615, + $73dc1683, $e3630b12, $94643b84, $0d6d6a3e, $7a6a5aa8, + $e40ecf0b, $9309ff9d, $0a00ae27, $7d079eb1, $f00f9344, + $8708a3d2, $1e01f268, $6906c2fe, $f762575d, $806567cb, + $196c3671, $6e6b06e7, $fed41b76, $89d32be0, $10da7a5a, + $67dd4acc, $f9b9df6f, $8ebeeff9, $17b7be43, $60b08ed5, + $d6d6a3e8, $a1d1937e, $38d8c2c4, $4fdff252, $d1bb67f1, + $a6bc5767, $3fb506dd, $48b2364b, $d80d2bda, $af0a1b4c, + $36034af6, $41047a60, $df60efc3, $a867df55, $316e8eef, + $4669be79, $cb61b38c, $bc66831a, $256fd2a0, $5268e236, + $cc0c7795, $bb0b4703, $220216b9, $5505262f, $c5ba3bbe, + $b2bd0b28, $2bb45a92, $5cb36a04, $c2d7ffa7, $b5d0cf31, + $2cd99e8b, $5bdeae1d, $9b64c2b0, $ec63f226, $756aa39c, + $026d930a, $9c0906a9, $eb0e363f, $72076785, $05005713, + $95bf4a82, $e2b87a14, $7bb12bae, $0cb61b38, $92d28e9b, + $e5d5be0d, $7cdcefb7, $0bdbdf21, $86d3d2d4, $f1d4e242, + $68ddb3f8, $1fda836e, $81be16cd, $f6b9265b, $6fb077e1, + $18b74777, $88085ae6, $ff0f6a70, $66063bca, $11010b5c, + $8f659eff, $f862ae69, $616bffd3, $166ccf45, $a00ae278, + $d70dd2ee, $4e048354, $3903b3c2, $a7672661, $d06016f7, + $4969474d, $3e6e77db, $aed16a4a, $d9d65adc, $40df0b66, + $37d83bf0, $a9bcae53, $debb9ec5, $47b2cf7f, $30b5ffe9, + $bdbdf21c, $cabac28a, $53b39330, $24b4a3a6, $bad03605, + $cdd70693, $54de5729, $23d967bf, $b3667a2e, $c4614ab8, + $5d681b02, $2a6f2b94, $b40bbe37, $c30c8ea1, $5a05df1b, + $2d02ef8d); FUNCTION UpdateCRC32(CRC: LongInt; VAR Buffer; Len: Word): LongInt; +VAR + i: Integer; + Octet: ^Byte; BEGIN - WriteLn('REETODO COMMON UpdateCRC32'); + Octet := @buffer; + for i := 1 to Len do + begin + CRC := CRC_32_TAB[Byte(Crc XOR LongInt(Octet^))] XOR ((Crc SHR 8) AND $00FFFFFF); + Inc(Octet); + end; + UpdateCRC32 := CRC; END; {$ENDIF} @@ -2043,6 +2109,7 @@ BEGIN SwapVectors; +{$IFDEF MSDOS} IF (General.SwapShell) THEN BEGIN s := GetEnv('TEMP'); @@ -2051,6 +2118,10 @@ BEGIN Init_SpawNo(s,General.SwapTo,20,10); ResultCode := Spawn(GetEnv('COMSPEC'),FName,0); END; +{$ENDIF} +{$IFDEF WIN32} + ResultCode := -1; +{$ENDIF} IF (NOT General.SwapShell) OR (ResultCode = -1) THEN BEGIN @@ -2787,7 +2858,8 @@ BEGIN NoSound; {$ENDIF} {$IFDEF WIN32} - WriteLn('REETODO COMMON GetKey'); Halt; + Sound(500, 200); + Sound(1500, 200); {$ENDIF} END; LastBeep := TempTimer; @@ -4071,7 +4143,7 @@ BEGIN c := Chr(Mem[VidSeg:(160 * (YPos - 1) + 2 * (XPos - 1))]); {$ENDIF} {$IFDEF WIN32} - WriteLn('REETODO COMMON ScreenDump'); Halt; + c := SysReadCharAt(XPos - 1, YPos - 1); {$ENDIF} IF (c = #0) THEN c := #32; @@ -4921,7 +4993,7 @@ BEGIN C2 := ((1.0 * Regs.Bx) * C1); {$ENDIF} {$IFDEF WIN32} - WriteLn('REETODO COMMON DiskKBFree'); Halt; + C2 := DiskFree(ExtractDriveNumber(DrivePath)); {$ENDIF} END; DiskKBFree := Round(C2 / 1024.0); diff --git a/SOURCE/COMMON2.PAS b/SOURCE/COMMON2.PAS index 808fa13..76f78f6 100644 --- a/SOURCE/COMMON2.PAS +++ b/SOURCE/COMMON2.PAS @@ -31,6 +31,7 @@ USES SysOp3, SplitCha {$IFDEF WIN32} + ,VPSysLow ,Windows {$ENDIF} ; @@ -180,7 +181,13 @@ END; {$IFDEF WIN32} PROCEDURE BiosScroll(up: Boolean); BEGIN - WriteLn('REETODO COMMON2 BiosScroll'); Halt; + if (up) then + begin + SysScrollUp(0, 0, MaxDisplayCols-1, MaxDisplayRows-1, 2, 7); + end else + begin + SysScrollDn(0, 0, MaxDisplayCols-1, MaxDisplayRows-1, 2, 7); + end; END; {$ENDIF} @@ -296,7 +303,7 @@ BEGIN Update_Logo(Win1,ScreenAddr[(FirstRow - 1) * 160],WIN1_LENGTH); {$ENDIF} {$IFDEF WIN32} - WriteLn('REETODO COMMON2 Update_Logo(Win1'); Halt; + Update_Logo(Win1, 1, FirstRow, WIN1_LENGTH); {$ENDIF} GoToXY(02,FirstRow); Write(Caps(Name)); @@ -346,7 +353,7 @@ BEGIN Update_Logo(Win2,ScreenAddr[(FirstRow - 1) * 160],WIN2_LENGTH); {$ENDIF} {$IFDEF WIN32} - WriteLn('REETODO COMMON2 Update_Logo(Win2'); Halt; + Update_Logo(Win2, 1, FirstRow, WIN2_LENGTH); {$ENDIF} GoToXY(02,FirstRow); Write(Street); @@ -384,7 +391,7 @@ BEGIN Update_Logo(Win3,ScreenAddr[(FirstRow - 1) * 160],WIN3_LENGTH); {$ENDIF} {$IFDEF WIN32} - WriteLn('REETODO COMMON2 Update_Logo(Win3'); Halt; + Update_Logo(Win3, 1, FirstRow, WIN3_LENGTH); {$ENDIF} GoToXY(06,FirstRow); Write(Loggedon); @@ -438,7 +445,7 @@ BEGIN Update_Logo(Win4,ScreenAddr[(FirstRow - 1) * 160],WIN4_LENGTH); {$ENDIF} {$IFDEF WIN32} - WriteLn('REETODO COMMON2 Update_Logo(Win4'); Halt; + Update_Logo(Win4, 1, FirstRow, WIN4_LENGTH); {$ENDIF} GoToXY(20,FirstRow); Write(Callers); @@ -466,7 +473,7 @@ BEGIN Update_Logo(Win5,ScreenAddr[(FirstRow - 1) * 160],WIN5_LENGTH); {$ENDIF} {$IFDEF WIN32} - WriteLn('REETODO COMMON2 Update_Logo(Win5'); Halt; + Update_Logo(Win5, 1, FirstRow, WIN5_LENGTH); {$ENDIF} GoToXY(20,FirstRow); Write(General.CallerNum); @@ -596,7 +603,7 @@ BEGIN Update_Logo(SYSKEY,ScreenAddr[0],SYSKEY_LENGTH); {$ENDIF} {$IFDEF WIN32} - WriteLn('REETODO COMMON2 Update_Logo(SYSKEY'); Halt; + Update_Logo(SYSKEY, 1, 1, SYSKEY_LENGTH); {$ENDIF} CursorOn(FALSE); C := ReadKey; diff --git a/SOURCE/COMMON3.PAS b/SOURCE/COMMON3.PAS index e1bae37..538f76c 100644 --- a/SOURCE/COMMON3.PAS +++ b/SOURCE/COMMON3.PAS @@ -32,7 +32,11 @@ PROCEDURE InputCaps(VAR S: STRING; MaxLen: Byte); IMPLEMENTATION USES - Crt; + Crt +{$IFDEF WIN32} + ,RPScreen +{$ENDIF} + ; PROCEDURE InputDefault(VAR S: STRING; v: STRING; MaxLen: Byte; InputFlags: InputFlagSet; LineFeed: Boolean); VAR @@ -359,7 +363,13 @@ VAR {$IFDEF WIN32} PROCEDURE SetCursor(InsertMode: Boolean); BEGIN - WriteLn('REETODO COMMON3 SetCursor'); Halt; + if (InsertMode) then + begin + RPInsertCursor; + end else + begin + RPBlockCursor; + end; END; {$ENDIF} diff --git a/SOURCE/LINECHAT.PAS b/SOURCE/LINECHAT.PAS index 8ecb638..0a4e0a3 100644 --- a/SOURCE/LINECHAT.PAS +++ b/SOURCE/LINECHAT.PAS @@ -88,7 +88,9 @@ BEGIN NoSound; {$ENDIF} {$IFDEF WIN32} - WriteLn('REETODO LINECHAT RequestSysOpChat'); Halt; + Sound(3000, 200); + Sound(1000, 200); + Sound(3000, 200); {$ENDIF} END; IF (KeyPressed) THEN @@ -384,7 +386,12 @@ BEGIN UNTIL (Counter = 200); {$ENDIF} {$IFDEF WIN32} - WriteLn('REETODO LINECHAT SysOpLineChat'); Halt; + Sound(650, 200); + Sound(700, 200); + Sound(600, 200); + Sound(500, 200); + Sound(400, 200); + Sound(300, 200); {$ENDIF} Prompt(^G^G); END diff --git a/SOURCE/MYIO.PAS b/SOURCE/MYIO.PAS index 037d465..71e471b 100644 --- a/SOURCE/MYIO.PAS +++ b/SOURCE/MYIO.PAS @@ -76,10 +76,16 @@ IMPLEMENTATION USES Crt {$IFDEF WIN32} + ,RPScreen ,VpSysLow {$ENDIF} ; +{$IFDEF WIN32} +VAR + SavedScreen: TScreenBuf; +{$ENDIF} + {$IFDEF MSDOS} PROCEDURE CursorOn(b: BOOLEAN); ASSEMBLER; ASM @@ -99,7 +105,13 @@ END; {$IFDEF WIN32} PROCEDURE CursorOn(b: BOOLEAN); BEGIN - WriteLn('REETODO MYIO CursorOn'); Halt; + if (b) then + begin + RPShowCursor; + end else + begin + RPHideCursor; + end; END; {$ENDIF} @@ -555,7 +567,7 @@ BEGIN Move(ScreenAddr[0],Wind[0],ScreenSize); {$ENDIF} {$IFDEF WIN32} - WriteLn('REETODO MYIO SaveScreen'); Halt; + RPSaveScreen(SavedScreen); {$ENDIF} END; @@ -565,7 +577,7 @@ BEGIN Move(Wind[0],ScreenAddr[0],ScreenSize); {$ENDIF} {$IFDEF WIN32} - WriteLn('REETODO MYIO RemoveWindow'); Halt; + RPRestoreScreen(SavedScreen); {$ENDIF} END; diff --git a/SOURCE/RPSCREEN.PAS b/SOURCE/RPSCREEN.PAS new file mode 100644 index 0000000..16aab0d --- /dev/null +++ b/SOURCE/RPSCREEN.PAS @@ -0,0 +1,157 @@ +{$IFDEF WIN32} +{$I DEFINES.INC} +{$ENDIF} +unit RPScreen; + +interface + +{$IFDEF WIN32} +uses + Windows; + +type + TScreenBuf = Array[1..25, 1..80] of TCharInfo; // REETODO Don't hardcode to 80x25 +{$ENDIF} + +procedure RPBlockCursor; +procedure RPGotoXY(xy: SmallWord); +procedure RPHideCursor; +procedure RPInsertCursor; +procedure RPRestoreScreen(var screenBuf: TScreenBuf); +procedure RPSaveScreen(var screenBuf: TScreenBuf); +function RPScreenSizeX: Word; +function RPScreenSizeY: Word; +procedure RPSetAttrAt(x, y, attr: SmallWord); +procedure RPShowCursor; +function RPWhereXY: SmallWord; + +implementation + +{$IFDEF WIN32} +var + StdOut: THandle; +{$ENDIF} + +{$IFDEF WIN32} +procedure RPBlockCursor; +var + CCI: TConsoleCursorInfo; +begin + CCI.bVisible := true; + CCI.dwSize := 15; + SetConsoleCursorInfo(StdOut, CCI); +end; + +procedure RPGotoXY(xy: SmallWord); +var + Coord: TCoord; +begin + Coord.x := xy AND $00FF; + Coord.y := xy AND $FF00 SHR 8; + SetConsoleCursorPosition(StdOut, Coord); +end; + +procedure RPHideCursor; +var + CCI: TConsoleCursorInfo; +begin + GetConsoleCursorInfo(StdOut, CCI); + CCI.bVisible := false; + SetConsoleCursorInfo(StdOut, CCI); +end; + +procedure RPInsertCursor; +var + CCI: TConsoleCursorInfo; +begin + CCI.bVisible := true; + CCI.dwSize := 99; + SetConsoleCursorInfo(StdOut, CCI); +end; + +{ REETODO Should detect screen size } +procedure RPRestoreScreen(var screenBuf: TScreenBuf); +var + BufSize : TCoord; + WritePos : TCoord; + DestRect : TSmallRect; +begin + BufSize.X := 80; + BufSize.Y := 25; + WritePos.X := 0; + WritePos.Y := 0; + DestRect.Left := 0; + DestRect.Top := 0; + DestRect.Right := 79; + DestRect.Bottom := 24; + WriteConsoleOutput(StdOut, @screenBuf[1][1], BufSize, WritePos, DestRect); +end; + +{ REETODO Should detect screen size } +procedure RPSaveScreen(var screenBuf: TScreenBuf); +var + BufSize : TCoord; + ReadPos : TCoord; + SourceRect : TSmallRect; +begin + BufSize.X := 80; + BufSize.Y := 25; + ReadPos.X := 0; + ReadPos.Y := 0; + SourceRect.Left := 0; + SourceRect.Top := 0; + SourceRect.Right := 79; + SourceRect.Bottom := 24; + ReadConsoleOutput(StdOut, @screenBuf[1][1], BufSize, ReadPos, SourceRect); +end; + +function RPScreenSizeX: Word; +var + CSBI: TConsoleScreenBufferInfo; +begin + GetConsoleScreenBufferInfo(StdOut, CSBI); + RPScreenSizeX := CSBI.srWindow.Right - CSBI.srWindow.Left + 1; +end; + +function RPScreenSizeY: Word; +var + CSBI: TConsoleScreenBufferInfo; +begin + GetConsoleScreenBufferInfo(StdOut, CSBI); + RPScreenSizeY := CSBI.srWindow.Bottom - CSBI.srWindow.Top + 1; +end; + +procedure RPSetAttrAt(x, y, attr: SmallWord); +var + NumWritten: Longint; + WriteCoord: TCoord; +begin + WriteCoord.X := x; + WriteCoord.Y := y; + WriteConsoleOutputAttribute(StdOut, @attr, 1, WriteCoord, NumWritten); +end; + +procedure RPShowCursor; +var + CCI: TConsoleCursorInfo; +begin + GetConsoleCursorInfo(StdOut, CCI); + CCI.bVisible := true; + SetConsoleCursorInfo(StdOut, CCI); +end; + +function RPWhereXY: SmallWord; +var + CSBI: TConsoleScreenBufferInfo; +begin + GetConsoleScreenBufferInfo(StdOut, CSBI); + RPWhereXY := CSBI.dwCursorPosition.x + (CSBI.dwCursorPosition.y SHL 8); +end; +{$ENDIF} + + +{$IFDEF WIN32} +BEGIN + StdOut := GetStdHandle(STD_OUTPUT_HANDLE); +{$ENDIF} +END. \ No newline at end of file diff --git a/SOURCE/WFCMENU.PAS b/SOURCE/WFCMENU.PAS index 1561d29..cbbdc15 100644 --- a/SOURCE/WFCMENU.PAS +++ b/SOURCE/WFCMENU.PAS @@ -317,7 +317,7 @@ BEGIN Update_Logo(ANSWER,ScreenAddr[(3*2)+(19*160)-162],ANSWER_LENGTH); {$ENDIF} {$IFDEF WIN32} - Update_logo(ANSWER, 3, 19, ANSWER_LENGTH); + Update_Logo(ANSWER, 3, 19, ANSWER_LENGTH); {$ENDIF} rl := 0; @@ -429,14 +429,14 @@ BEGIN Update_Logo(WFC,ScreenAddr[0],WFC_LENGTH); {$ENDIF} {$IFDEF WIN32} - Update_logo(WFC, 1, 1, WFC_LENGTH); + Update_Logo(WFC, 1, 1, WFC_LENGTH); {$ENDIF} IF (General.NetworkMode) THEN {$IFDEF MSDOS} Update_Logo(WFCNET,ScreenAddr[(3*2)+(19*160)-162],WFCNET_LENGTH); {$ENDIF} {$IFDEF WIN32} - Update_logo(WFCNET, 3, 19, WFCNET_LENGTH); + Update_Logo(WFCNET, 3, 19, WFCNET_LENGTH); {$ENDIF} LoadURec(ThisUser,1); @@ -611,7 +611,7 @@ BEGIN Update_Logo(WFC0,ScreenAddr[0],WFC0_LENGTH); {$ENDIF} {$IFDEF WIN32} - Update_logo(WFC0, 1, 1, WFC0_LENGTH); + Update_Logo(WFC0, 1, 1, WFC0_LENGTH); {$ENDIF} END; END;