From 8a476ab61024d530e018cf183f7420e13fc00cdf Mon Sep 17 00:00:00 2001 From: Norayr Chilingarian Date: Thu, 7 May 2020 19:52:16 +0400 Subject: [PATCH] removed unnecessary files --- CharacterStack.Mod | 121 ---------------- DependencyResolver.Mod | 116 ---------------- FileManager.Mod | 81 ----------- JsonParser.Mod | 304 ----------------------------------------- PackageFileParser.Mod | 34 ----- RemoteClient.Mod | 6 - Settings.Mod | 8 -- http.Mod | 144 ------------------- 8 files changed, 814 deletions(-) delete mode 100644 CharacterStack.Mod delete mode 100644 DependencyResolver.Mod delete mode 100644 FileManager.Mod delete mode 100644 JsonParser.Mod delete mode 100644 PackageFileParser.Mod delete mode 100644 RemoteClient.Mod delete mode 100644 Settings.Mod delete mode 100644 http.Mod diff --git a/CharacterStack.Mod b/CharacterStack.Mod deleted file mode 100644 index 6fedef7..0000000 --- a/CharacterStack.Mod +++ /dev/null @@ -1,121 +0,0 @@ -MODULE CharacterStack; -IMPORT List, Out, Sys; - -TYPE - integer* = Sys.integer; - TObject* = Sys.TObject; - - Node* = POINTER TO NodeDesc; - NodeDesc* = List.NodeDesc; - - TChar* = POINTER TO TCharDesc; - - TCharDesc = RECORD (Sys.TObjectDesc) - char* : CHAR - END; - - string = Sys.string; - - CharacterStackType* = POINTER TO CharacterStackTypeDesc; - - CharacterStackTypeDesc* = RECORD (List.TListDesc) - pop*: PROCEDURE(self: CharacterStackType): CHAR; - push*: PROCEDURE(self: CharacterStackType; char: CHAR); - top*: PROCEDURE(self: CharacterStackType) : CHAR; - END; - -VAR - characterStack: CharacterStackType; - -PROCEDURE push(self: CharacterStackType; char: CHAR); -VAR - ch: TChar; - int: integer; -BEGIN - NEW(ch); - ch.char := char; - int := self.Add(self, ch); -END push; - -PROCEDURE pop(self: CharacterStackType): CHAR; -VAR - n: Node; -BEGIN - NEW(n); - - IF self.Count = 0 THEN RETURN 0X END; - - n := self.Get(self, self.Count - 1); - self.Delete(self, self.Count - 1); - RETURN n.obj(TChar).char; -END pop; - -PROCEDURE top(self: CharacterStackType): CHAR; -VAR - n: Node; -BEGIN - NEW(n); - - IF self.Count = 0 THEN RETURN 0X END; - - n := self.Get(self, self.Count - 1); - RETURN n.obj(TChar).char; -END top; - -PROCEDURE Create* () : CharacterStackType; -VAR - l : CharacterStackType; -BEGIN - NEW(l); - l.First := NIL; - l.Last := NIL; - l.Count := 0; - l.Add := List.Add; - l.Append := List.Append; - l.AppendList := List.AppendList; - l.Clear := List.Clear; - l.Free := List.Free; - l.Insert := List.Insert; - l.Delete := List.Delete; - l.Empty := List.Empty; - l.Get := List.Get; - l.res := TRUE; - - l.pop := pop; - l.push:= push; - l.top := top; - RETURN(l); -END Create; - -BEGIN - (* NEW(characterStack); - characterStack := Create(); - characterStack.push(characterStack, 'a'); - characterStack.push(characterStack, 'b'); - characterStack.push(characterStack, 'c'); - - Out.Char(characterStack.top(characterStack)); - Out.Ln(); - Out.Char(characterStack.pop(characterStack)); - Out.Ln(); - Out.Char(characterStack.top(characterStack)); - Out.Ln(); - Out.Char(characterStack.pop(characterStack)); - Out.Ln(); - Out.Char(characterStack.top(characterStack)); - Out.Ln(); - Out.Char(characterStack.pop(characterStack)); - Out.Ln(); - Out.Char(characterStack.top(characterStack)); - Out.Ln(); - Out.Char(characterStack.pop(characterStack)); - Out.Ln(); - Out.Char(characterStack.top(characterStack)); - Out.Ln(); - Out.Char(characterStack.pop(characterStack)); - Out.Ln(); - Out.Char(characterStack.top(characterStack)); - Out.Ln(); - Out.Char(characterStack.pop(characterStack)); - Out.Ln(); *) -END CharacterStack. \ No newline at end of file diff --git a/DependencyResolver.Mod b/DependencyResolver.Mod deleted file mode 100644 index c215a2a..0000000 --- a/DependencyResolver.Mod +++ /dev/null @@ -1,116 +0,0 @@ -MODULE DependencyResolver; -IMPORT JsonParser, Settings, PackageResolver, Strings, Logger; - -CONST ArrayMaxNumber = 30; - -VAR - moduleNames: ARRAY ArrayMaxNumber OF JsonParser.TString; - moduleJson: ARRAY ArrayMaxNumber OF JsonParser.TString; - moduleVersions: ARRAY ArrayMaxNumber OF JsonParser.TString; - - j : LONGINT; - -PROCEDURE ResolveVersionFiles *(jsonString: ARRAY OF CHAR); -VAR - jsonRecord, dependencies: JsonParser.JsonTypePointer; - keyFound: BOOLEAN; - packageName, version, filePath: ARRAY 32 OF CHAR; - returnedJSON: JsonParser.TString; - keys: ARRAY ArrayMaxNumber OF JsonParser.TString; - i, k : LONGINT; -BEGIN - jsonRecord := JsonParser.Create(jsonString); - keyFound := jsonRecord.GetTerminal(jsonRecord, "Package", packageName); - IF keyFound THEN - Logger.Log("Parsing package by name"); - Logger.Log(packageName); - Logger.Log("------------------------"); - ELSE Logger.Log("Value for the Key is not found"); RETURN; END; - - dependencies := jsonRecord.GetNonTerminal(jsonRecord, "Dependencies"); - - IF dependencies = NIL THEN - Logger.Log("Parsing package by name"); - Logger.Log(packageName); - Logger.Log("Error"); - Logger.Log("No dependency"); - Logger.Log("------------------------"); - END; - - dependencies.GetTerminalKeys(dependencies, keys); - - FOR i := 0 TO dependencies.TerminalNumber - 1 DO (* TODO: rewrite with working getter everywhere*) - keyFound := dependencies.GetTerminal(dependencies, keys[i], version); - - IF ~keyFound THEN Logger.Log('ERROR while searching key'); Logger.Log(keys[i]); END; - ASSERT(keyFound); - - COPY("", filePath); - Strings.Append("/", filePath); - Strings.Append(keys[i], filePath); - Strings.Append("/", filePath); - Strings.Append(version, filePath); - Strings.Append("/", filePath); - Strings.Append(Settings.packageFileName, filePath); - - JsonParser.Empty(returnedJSON); - - PackageResolver.ResolveFile( - Settings.host, - Settings.port, - filePath, - keys[i], - Settings.packageFileName, - returnedJSON - ); - - keyFound := FALSE; - IF j >= LEN(moduleNames) THEN - Logger.Log("Out of range in ResolveVersionFiles function in ..."); - END; - ASSERT(j < LEN(moduleNames)); - - FOR k := 0 TO j - 1 DO - IF Strings.Match(moduleNames[k], keys[i]) THEN - keyFound := TRUE; - END; - END; - - - IF ~keyFound THEN - COPY(keys[i], moduleNames[j]); - COPY(version, moduleVersions[j]); - COPY(returnedJSON, moduleJson[j]); - INC(j); - ResolveVersionFiles(returnedJSON); - END; - END; -END ResolveVersionFiles; - -PROCEDURE ResolvePackages*(); -VAR - i: LONGINT; - keyFound: BOOLEAN; - jsonRecord, filesRecord: JsonParser.JsonTypePointer; - values: ARRAY 10 OF JsonParser.TString; - host, port, path, packageName, version: ARRAY 50 OF CHAR; -BEGIN - FOR i := 0 TO j - 1 DO - jsonRecord := JsonParser.Create(moduleJson[i]); - filesRecord := jsonRecord.GetNonTerminal(jsonRecord, "Files"); - - IF filesRecord = NIL THEN - Logger.Log("Error: no files section found"); - END; - - ASSERT(filesRecord # NIL); - keyFound := jsonRecord.GetTerminal(jsonRecord, "Remote", host); - keyFound := jsonRecord.GetTerminal(jsonRecord, "Port", port); - keyFound := jsonRecord.GetTerminal(jsonRecord, "Path", path); - keyFound := jsonRecord.GetTerminal(jsonRecord, "Package", packageName); - keyFound := jsonRecord.GetTerminal(jsonRecord, "Version", version); - PackageResolver.Resolve(host, port, path, packageName, version, filesRecord.TerminalValues); (* TODO: filesRecord.TerminalValues create working getter for this*) - END; -END ResolvePackages; - -END DependencyResolver. \ No newline at end of file diff --git a/FileManager.Mod b/FileManager.Mod deleted file mode 100644 index 8fc2f53..0000000 --- a/FileManager.Mod +++ /dev/null @@ -1,81 +0,0 @@ -MODULE FileManager; -IMPORT Files, Out, Logger, Strings, Platform; - -PROCEDURE WriteString(VAR r : Files.Rider; str : ARRAY OF CHAR); -BEGIN - Files.WriteBytes(r, str, Strings.Length(str)); -END WriteString; - -PROCEDURE Read*(fileName: ARRAY OF CHAR; VAR returnString: ARRAY OF CHAR): BOOLEAN; -VAR - f: Files.File; - r: Files.Rider; - i: LONGINT; -BEGIN - f := Files.Old(fileName); - - IF f = NIL THEN - Logger.Log("-------------------"); - Logger.Log("File Name"); - Logger.Log(fileName); - Logger.Log("File not found"); - Logger.Log("-------------------"); - RETURN FALSE - END; - - Files.Set(r, f, 0); - - i := 0; - REPEAT - Files.Read(r, returnString[i]); - INC(i); - UNTIL r.eof OR (i>=LEN(returnString)); - - RETURN TRUE; -END Read; - -PROCEDURE Write*(fileName, content: ARRAY OF CHAR): BOOLEAN; -VAR - f: Files.File; - r: Files.Rider; - i: LONGINT; -BEGIN - f := Files.New(fileName); - - IF f = NIL THEN - Logger.Log("-------------------"); - Logger.Log("File Name"); - Logger.Log(fileName); - Logger.Log("File not found"); - Logger.Log("-------------------"); - RETURN FALSE - END; - - Files.Set(r, f, 0); - Logger.Log("Writing to file"); - Logger.Log(fileName); - Logger.Log("-------------------"); - WriteString(r, content); - - Files.Register(f); - - RETURN TRUE; -END Write; - -PROCEDURE CreateDirectory*(name, path: ARRAY OF CHAR): BOOLEAN; -VAR - command, path0: ARRAY 100 OF CHAR; - errorCode: LONGINT; -BEGIN - COPY(path, path0); - COPY("mkdir -p ", command); - Strings.Append("/", path0); - Strings.Append(name, path0); - Strings.Append(path0, command); - errorCode := Platform.System(command); - - IF errorCode = 0 THEN RETURN TRUE - ELSE RETURN FALSE END; -END CreateDirectory; - -END FileManager. \ No newline at end of file diff --git a/JsonParser.Mod b/JsonParser.Mod deleted file mode 100644 index e722295..0000000 --- a/JsonParser.Mod +++ /dev/null @@ -1,304 +0,0 @@ -MODULE JsonParser; -IMPORT Logger, CharacterStack, Strings, Out, strutils, Settings; -CONST - ArrayMaxNumber = 30; - ArrayMaxNumberChar = 2000; - (* Const *) - symbolBracketStart = "{"; - symbolBracketEnd = "}"; - (* TODO: Reverse " and ' *) - quote = Settings.quote; - coma = ","; -TYPE - TString* = ARRAY ArrayMaxNumberChar OF CHAR; - - JsonTypePointer* = POINTER TO JsonType; - - JsonType* = RECORD - GetTerminal* : PROCEDURE(self : JsonTypePointer; string : ARRAY OF CHAR; VAR returnValue : ARRAY OF CHAR): BOOLEAN; - GetNonTerminal* : PROCEDURE(self : JsonTypePointer; key : ARRAY OF CHAR): JsonTypePointer; - HasKey* : PROCEDURE(self : JsonTypePointer; key : ARRAY OF CHAR): BOOLEAN; - TypeOfTheKey* : PROCEDURE(self : JsonTypePointer; key : ARRAY OF CHAR; VAR returnValue : ARRAY OF CHAR); - GetTerminalKeys* : PROCEDURE(self : JsonTypePointer; VAR destination : ARRAY OF TString); - GetTerminalValues* : PROCEDURE(self : JsonTypePointer; VAR destination : ARRAY OF TString); - GetNoneTerminalKeys* : PROCEDURE(self : JsonTypePointer; VAR destination : ARRAY OF TString); - GetTerminalNumber* : PROCEDURE(self : JsonTypePointer): LONGINT; - GetNonTerminalNumber* : PROCEDURE(self : JsonTypePointer): LONGINT; - - TerminalKeys : ARRAY ArrayMaxNumber OF TString; - TerminalValues* : ARRAY ArrayMaxNumber OF TString; - TerminalNumber* : LONGINT; - - NonTerminalKeys : ARRAY ArrayMaxNumber OF TString; - NonTerminalValues : POINTER TO ARRAY OF JsonTypePointer; - NonTerminalNumber* : LONGINT; - END; - -VAR - jsonRecord: JsonTypePointer; - testValue: ARRAY ArrayMaxNumber OF CHAR; - keyFound: BOOLEAN; - -PROCEDURE GetTerminalNumber*(self : JsonTypePointer): LONGINT; -BEGIN RETURN self.TerminalNumber END GetTerminalNumber; - -PROCEDURE GetNonTerminalNumber*(self : JsonTypePointer): LONGINT; -BEGIN RETURN self.NonTerminalNumber END GetNonTerminalNumber; - -PROCEDURE GetNonTerminal(self : JsonTypePointer; key : ARRAY OF CHAR): JsonTypePointer; -VAR - i: LONGINT; -BEGIN - FOR i := 0 TO self.NonTerminalNumber - 1 DO - IF Strings.Match(key, self.NonTerminalKeys[i]) THEN RETURN self.NonTerminalValues[i] END; - END; - - RETURN NIL; -END GetNonTerminal; - -PROCEDURE Empty *(VAR string: ARRAY OF CHAR); -VAR - i : LONGINT; -BEGIN - FOR i := 0 TO LEN(string) - 1 DO string[i] := 0X END; - COPY("", string); -END Empty; - -PROCEDURE GetTerminal *(self: JsonTypePointer; key: ARRAY OF CHAR; VAR returnValue: ARRAY OF CHAR): BOOLEAN; -VAR - i: LONGINT; - noneTerminal: JsonTypePointer; - strings: strutils.strings; - parent, children: ARRAY ArrayMaxNumber OF CHAR; -BEGIN - - FOR i := 0 TO self.TerminalNumber DO - IF Strings.Match(key, self.TerminalKeys[i]) THEN COPY(self.TerminalValues[i], returnValue); RETURN TRUE END; - END; - - strings := strutils.tokenize(key, '.'); - - IF LEN(strings^) < 1 THEN RETURN FALSE END; - - COPY(strings^[0], parent); - - IF Strings.Length(parent) < 1 THEN RETURN FALSE END; - - noneTerminal := self.GetNonTerminal(self, parent); - - IF noneTerminal = NIL THEN RETURN FALSE END; - - FOR i := 1 TO LEN(strings^) - 1 DO - Strings.Append(strings[i], children); - IF i < LEN(strings^) - 1 THEN - Strings.Append(".", children); - END; - END; - - RETURN noneTerminal.GetTerminal(noneTerminal, children, returnValue); - - RETURN FALSE; -END GetTerminal; - -PROCEDURE GetTerminalKeys(self : JsonTypePointer; VAR destination : ARRAY OF TString); -VAR - i: LONGINT; -BEGIN - FOR i := 0 TO self.TerminalNumber DO - COPY(self.TerminalKeys[i], destination[i]); - END; -END GetTerminalKeys; - -PROCEDURE GetTerminalValues(self : JsonTypePointer; VAR destination : ARRAY OF TString); -VAR - i: LONGINT; -BEGIN - FOR i := 0 TO self.TerminalNumber - 1 DO - Empty(destination[i]); - COPY(self.TerminalValues[i], destination[i]); - END; -END GetTerminalValues; - -PROCEDURE GetNoneTerminalKeys(self : JsonTypePointer; VAR destination : ARRAY OF TString); -VAR - i: LONGINT; -BEGIN - FOR i := 0 TO LEN(self.NonTerminalKeys) - 1 DO - destination[i] := self.NonTerminalKeys[i]; - END; -END GetNoneTerminalKeys; -(* - TODO: - Create a good validation for comas - Create a good validation for name repetition -*) - -PROCEDURE PushDownString( - string: ARRAY OF CHAR; - startCharacter: CHAR; - endCharacter: CHAR; - i: LONGINT; - VAR returnString: ARRAY OF CHAR): LONGINT; -VAR - characterStack: CharacterStack.CharacterStackType; - j , k: LONGINT; -BEGIN - NEW(characterStack); - j := i; - characterStack := CharacterStack.Create(); - Empty(returnString); - REPEAT - IF (characterStack.Count > 1) & (string[j] = endCharacter) THEN - REPEAT UNTIL characterStack.pop(characterStack) = startCharacter; - ELSE - characterStack.push(characterStack, string[j]); - INC(j); - END; - UNTIL characterStack.Count = 0; (* do not trust top it btings OAX on EOL*) - - IF j >= LEN(returnString) THEN - Logger.Log('ERROR string out of range in JSON parser'); - END; - ASSERT(j < LEN(returnString)); - - FOR k := i TO j DO - returnString[k - i] := string[k]; - END; - - RETURN j; (* returning next symbol of quote *) -END PushDownString; - -PROCEDURE deQuote(text: ARRAY OF CHAR; VAR result: ARRAY OF CHAR); -VAR - i, j: LONGINT; -BEGIN - j := 0; - FOR i := 0 TO Strings.Length(text) DO - IF text[i] # quote THEN - result[j] := text[i]; - INC(j); - END; - END; -END deQuote; - -PROCEDURE Create*(text: ARRAY OF CHAR): JsonTypePointer; -VAR - self: JsonTypePointer; - i, j, terminalIterator, noneTerminalIterator: LONGINT; - characterStack: CharacterStack.CharacterStackType; - key, val, nonTerminalVal, string: ARRAY ArrayMaxNumberChar OF CHAR; - symbol: CHAR; - symbolStart: CHAR; - quoteStart: BOOLEAN; -BEGIN - NEW(self); - NEW(self.NonTerminalValues, ArrayMaxNumber); - self.GetTerminal := GetTerminal; - self.GetNonTerminal := GetNonTerminal; - self.GetTerminalKeys := GetTerminalKeys; - self.GetNoneTerminalKeys := GetNoneTerminalKeys; - NEW(characterStack); - characterStack := CharacterStack.Create(); - - i := 0; - j := 0; - terminalIterator := 0; - noneTerminalIterator := 0; - - Empty(key); - Empty(val); - Empty(nonTerminalVal); - Empty(string); - - quoteStart := FALSE; - - REPEAT - IF (text[i] = symbolBracketStart) & (i = 0) THEN - INC(i); - (* Logger.Log("Starting Parse Json"); *) - END; - - IF symbol = symbolBracketStart THEN - (* Logger.Log("End Parsing Json"); *) - END; - symbol := text[i]; - - (* Logger.LogIntLn(i); *) - (* IF i > 508 THEN - Logger.Log(text); - END; *) - (* terminals *) - IF symbol = quote THEN - i := PushDownString(text, quote, quote, i, string); - END; - - IF (Strings.Length(string) > 0) & (symbol = quote) THEN - IF Strings.Length(key) > 0 THEN - COPY(string, val); - ELSE - COPY(string, key); - END; - - Empty(string); - END; - - IF (Strings.Length(key) > 0) & (Strings.Length(val) > 0) THEN - deQuote(key, self.TerminalKeys[terminalIterator]); - deQuote(val, self.TerminalValues[terminalIterator]); - - INC(terminalIterator); - - Empty(key); - Empty(val); - END; - - (* none terminals *) - IF symbol = symbolBracketStart THEN - i := PushDownString(text, symbolBracketStart, symbolBracketEnd, i, string); - END; - - IF (Strings.Length(string) > 0) & (symbol = symbolBracketStart) THEN - IF Strings.Length(key) > 0 THEN - COPY(string, nonTerminalVal); - END; - - Empty(string); - END; - - IF (Strings.Length(key) > 0) & (Strings.Length(nonTerminalVal) > 0) THEN - deQuote(key, self.NonTerminalKeys[noneTerminalIterator]); - self.NonTerminalValues[noneTerminalIterator] := Create(nonTerminalVal); - - INC(noneTerminalIterator); - - Empty(key); - Empty(nonTerminalVal); - END; - - INC(i); - UNTIL (i >= LEN(text) - 1) OR (text[i] = 0X); - - self.NonTerminalNumber := noneTerminalIterator; - self.TerminalNumber := terminalIterator; - - RETURN self; -END Create; - -BEGIN - (* NEW(jsonRecord); - jsonRecord := Create("{'foo': 'bar', 'test': 'test1', 'test2': {'sub': 'dub'}}"); - - keyFound := jsonRecord.GetTerminal(jsonRecord, "foo", testValue); - - IF keyFound THEN - Logger.Log('found KEY'); - Logger.Log(testValue); - ELSE Logger.Log('Value for the Key is not found') END; - - keyFound := jsonRecord.GetTerminal(jsonRecord, "test2.sub", testValue); - - IF keyFound THEN - Logger.Log('found KEY'); - Logger.Log(testValue); - ELSE Logger.Log('Value for the Key is not found') END; *) -END JsonParser. \ No newline at end of file diff --git a/PackageFileParser.Mod b/PackageFileParser.Mod deleted file mode 100644 index f1f816b..0000000 --- a/PackageFileParser.Mod +++ /dev/null @@ -1,34 +0,0 @@ -MODULE PackageFileParser; -IMPORT - JsonParser, - FileManager, - http, - Logger, - DependencyResolver, - Settings; -CONST - MAXARRAYNUMBER = 1000; -PROCEDURE install*; -VAR - jsonData: ARRAY MAXARRAYNUMBER OF CHAR; - success: BOOLEAN; -BEGIN - Logger.Log("Starting install process"); - success := FileManager.Read(Settings.packageFileName, jsonData); - - IF ~success THEN Logger.Log("Some ERROR occured while reading VERSIONFILE") END; - ASSERT(success); - - Logger.Log("Starting resolving dependencies"); - - DependencyResolver.ResolveVersionFiles(jsonData); - DependencyResolver.ResolvePackages(); - Logger.Log("======================"); - Logger.Log("======================"); - Logger.Log("Installation complete"); - Logger.Log("Thanks for using OPIUM!"); -END install; - -BEGIN - -END PackageFileParser. \ No newline at end of file diff --git a/RemoteClient.Mod b/RemoteClient.Mod deleted file mode 100644 index 2c45e8c..0000000 --- a/RemoteClient.Mod +++ /dev/null @@ -1,6 +0,0 @@ -MODULE RemoteClient; -IMPORT - httpClient -BEGIN - -END RemoteClient. \ No newline at end of file diff --git a/Settings.Mod b/Settings.Mod deleted file mode 100644 index 9c5fdb1..0000000 --- a/Settings.Mod +++ /dev/null @@ -1,8 +0,0 @@ -MODULE Settings; -CONST - packageFileName* = "VersionFile.json"; - host* = "localhost"; - port* = "80"; - installPath* = "dependencies"; - quote* = '"'; -END Settings. \ No newline at end of file diff --git a/http.Mod b/http.Mod deleted file mode 100644 index eaf1bd4..0000000 --- a/http.Mod +++ /dev/null @@ -1,144 +0,0 @@ -MODULE http; -IMPORT Strings, Internet, Logger, Out; -CONST - MAXARRAYNUMBER = 10000; - MAXARRAYNUMBEREXTENDED = 100000; - -TYPE - PSTRING = POINTER TO ARRAY OF CHAR; - -VAR - buff, buff2: ARRAY MAXARRAYNUMBEREXTENDED OF CHAR; - -PROCEDURE Empty *(VAR string: ARRAY OF CHAR); -VAR - i : LONGINT; -BEGIN - FOR i := 0 TO LEN(string) - 1 DO string[i] := 0X END; - COPY("", string); -END Empty; - -PROCEDURE getClean *(buff: ARRAY OF CHAR; VAR clean: ARRAY OF CHAR); -VAR - i: INTEGER; - newLine: ARRAY 2 OF CHAR; - lineIsHeader, EOL, notFirstLine: BOOLEAN; -BEGIN - i := 0; - notFirstLine := FALSE; - lineIsHeader := FALSE; - EOL := FALSE; - - REPEAT - IF EOL THEN - lineIsHeader := FALSE; - EOL := FALSE; - notFirstLine := TRUE - END; - - IF buff[i] = ":" THEN lineIsHeader := TRUE END; - - IF ((buff[i - 1] = 0DX) & (buff[i] = 0AX)) THEN EOL := TRUE END; - - INC(i); - UNTIL (i + 2 > Strings.Length(buff)) OR (~lineIsHeader & EOL & notFirstLine); - - Strings.Extract(buff, i, Strings.Length(buff), clean); -END getClean; - -PROCEDURE AppendEOLAndClean(buff: ARRAY OF CHAR; VAR buffClean: PSTRING); -VAR i: LONGINT; -BEGIN - i := Strings.Length(buff); - - NEW(buffClean, i + 3); - - COPY(buff, buffClean^); - - buffClean[i] := 0DX; - buffClean[i + 1] := 0AX; - buffClean[i + 2] := " "; -END AppendEOLAndClean; - -PROCEDURE addHeader(key, val: ARRAY OF CHAR; VAR buff: PSTRING); -VAR - header: ARRAY MAXARRAYNUMBER OF CHAR; -BEGIN - Empty(header); - Strings.Append(key, header); - Strings.Append(": ", header); - Strings.Append(val, header); - AppendEOLAndClean(header, buff); -END addHeader; - -PROCEDURE getHeader(buff, key: ARRAY OF CHAR; VAR val: ARRAY OF CHAR); -VAR - positionStart, valPositionStart, i: LONGINT; -BEGIN - positionStart := Strings.Pos(key, buff, 0); - valPositionStart := positionStart + Strings.Length(key) + 1; - i := 0; - REPEAT - val[i] := buff[valPositionStart + i]; - INC(i); - UNTIL (ORD(val[i]) = 10) (* 0DX number(newline)*) OR - (i > Strings.Length(buff)); -END getHeader; - -PROCEDURE get *(host, port, path: ARRAY OF CHAR; VAR buff: ARRAY OF CHAR); -VAR - socket : Internet.Socket; - connectionFlag: BOOLEAN; - valueContentLength: REAL; - send, valueContentLengthString: ARRAY MAXARRAYNUMBER OF CHAR; - sendClean: PSTRING; - httpTail: ARRAY 16 OF CHAR; - endOfLine: ARRAY 3 OF CHAR; - tmpBuff: ARRAY MAXARRAYNUMBER OF CHAR; -BEGIN - Empty( buff); - httpTail := " HTTP/1.1"; - - connectionFlag := Internet.Connect(host, port, socket); - - send := "GET "; - - Strings.Append(path, send); - Strings.Append(httpTail, send); - - - AppendEOLAndClean(send, sendClean); - connectionFlag := Internet.Write(socket, sendClean^); - - addHeader("HOST", host, sendClean); - connectionFlag := Internet.Write(socket, sendClean^); - - addHeader("User-Agent", "oberon-http-client/1.0", sendClean); - connectionFlag := Internet.Write(socket, sendClean^); - - addHeader("Accept", "*/*", sendClean); - connectionFlag := Internet.Write(socket, sendClean^); - - AppendEOLAndClean("", sendClean); - connectionFlag := Internet.Write(socket, sendClean^); - REPEAT - Empty( tmpBuff); - - connectionFlag := Internet.Read(socket, tmpBuff); - Strings.Append(tmpBuff, buff); - getHeader(buff, "Content-Length", valueContentLengthString); - Strings.StrToReal(valueContentLengthString, valueContentLength); - (* Out.Real(valueContentLength, 6); - Out.Ln; - Logger.LogIntLn(Strings.Length(buff)); - *) - (* Logger.Log(buff); *) - UNTIL ~connectionFlag OR (Strings.Length(buff) > valueContentLength); - Internet.Disconnect(socket); -END get; - -BEGIN - (* get("norayr.am", "/tmp/", "80", buff); - getClean(buff, buff2); - Logger.Log(buff2); *) -END http. \ No newline at end of file