Record work
This commit is contained in:
parent
a4ab7a1990
commit
74156a71c0
|
@ -4089,3 +4089,7 @@
|
|||
Upgrade option.
|
||||
|
||||
+ Added CARDINAL (Unsigned 32-bit Integer) type to MPL
|
||||
|
||||
+ MPLC and MIDE now calculate the error position in the file (line and
|
||||
column) after the error has occured. This takes a little bit of time
|
||||
but it ensures that the column/line error position is accurate.
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
# Note: the DF MCI code can also be used to display files in place of
|
||||
# prompts.
|
||||
|
||||
000 |DFpreuser |CR|01[|10þ|01] |09Enter your user name:
|
||||
000 |DFpreuser |CR|01[|10þ|01] |09Enter your user name: |XX
|
||||
; Log in as new user prompt
|
||||
001 |CR|12Create an account with this BBS? |11
|
||||
; User's password
|
||||
|
@ -22,17 +22,17 @@
|
|||
; User login: Invalid PW
|
||||
003 |CR|12Invalid password.
|
||||
; Displayed IMMEDATELY when a user connects if the password is set
|
||||
004 |CRSystem Password:
|
||||
004 |CRSystem Password: |XX
|
||||
; New user password prompt
|
||||
005 |CRNew User Password:
|
||||
005 |CRNew User Password: |XX
|
||||
; New user login: first and last name prompt
|
||||
006 |01[|10þ|01] |09Enter your full REAL name ->
|
||||
006 |01[|10þ|01] |09Enter your full REAL name -> |XX
|
||||
; Displayed if user doesn't enter a two word name.
|
||||
007 |CR|12Please enter your first AND last name!|CR
|
||||
; Displayed if user enters a new user name that already exists.
|
||||
008 |CR|12User already exists.|CR
|
||||
; New user login: Enter your handle/alias prompt
|
||||
009 |01[|10þ|01] |09Enter your alias/handle ->
|
||||
009 |01[|10þ|01] |09Enter your alias/handle -> |XX
|
||||
; New user login: Enter your address prompt
|
||||
010 |CR|03Enter your street address.|CR|09:
|
||||
; New user login: Enter your city/state
|
||||
|
@ -44,21 +44,21 @@
|
|||
; New user login: Enter your data phone number
|
||||
014 |CR|03Enter your data phone number:|CR|09:
|
||||
; New user login: Enter your birthdate.
|
||||
015 |01[|10þ|01] |09Enter your birthdate |01[|10|UF|01]|09 ->
|
||||
015 |01[|10þ|01] |09Enter your birthdate |01[|10|UF|01]|09 -> |XX
|
||||
; New user login: Gender (M)ale, (F)emale
|
||||
016 |01[|10þ|01] |09Are you |01[|10M|01]|09ale or |01[|10F|01]|09emale ->
|
||||
016 |01[|10þ|01] |09Are you |01[|10M|01]|09ale or |01[|10F|01]|09emale -> |XX
|
||||
; New user login: Password prompt
|
||||
017 |DFprepass |CR|01[|10þ|01] |09Password ->
|
||||
017 |DFprepass |CR|01[|10þ|01] |09Password -> |XX
|
||||
; Displayed if user enters a password shorter than 4 chars.
|
||||
018 |CR|12Password must be at least 4 characters long!|DE|DE|DE
|
||||
; New user login: PW verification prompt
|
||||
019 |01[|10þ|01] |09Again ->
|
||||
019 |01[|10þ|01] |09Again -> |XX
|
||||
; New user login: Passwords do not match
|
||||
020 |CR|12Passwords do not match!|DE|DE|DE
|
||||
; New user login: Saving/creating new user account
|
||||
021 |CR|01[|10þ|01] |09Saving new account information|01...
|
||||
; System pause prompt
|
||||
022 !go-pawz
|
||||
022 |15þ|07þ|08þ|09|17Ý|15 Pause |09Þ|16|08þ|07þ|15þ
|
||||
; Chat call - reason for chat
|
||||
023 |CR|14Why do you wish to chat with the Sysop?|CR|09:
|
||||
; Paging Sysop text
|
||||
|
@ -80,7 +80,7 @@
|
|||
; User list footer &1 = Total # of users listed
|
||||
031 |09|$D73Ä|CR |01[|10þ|01] |09Users: |07|$R46|&1 |PA
|
||||
; User list search string
|
||||
032 |CR|01[|10þ|01] |09Enter Search String |01(|07Enter|01/|07All|01)|09:
|
||||
032 |CR|01[|10þ|01] |09Enter Search String |01(|07Enter|01/|07All|01)|09: |XX
|
||||
; File base list header
|
||||
033 |CL|09Ú|$D77Ä|01¿|CR|09³|17 ± |15File Base Listing|$L56|FG |01|16³|CR|09À|01|$D77ÄÙ|CR |10A|02rea |10F|02ile |10B|02ase |10N|02ame |10A|02rea |10F|02ile |10B|02ase |10N|02ame|CR |09|$D77Ä
|
||||
; File base listing format:
|
||||
|
@ -89,7 +89,7 @@
|
|||
; File upload testing FAILED text
|
||||
035 Failed
|
||||
; File base listing prompt.
|
||||
036 |09|$D77Ä|CR |01[|10þ|01] |09Select file base |01[|10?|01/|10List|01]|09:
|
||||
036 |09|$D77Ä|CR |01[|10þ|01] |09Select file base |01[|10?|01/|10List|01]|09: |XX
|
||||
; Displayed if there are no available file bases
|
||||
037 |CR|12There are no available file bases
|
||||
; Displayed if user hasn't selected a file base
|
||||
|
@ -126,7 +126,7 @@
|
|||
; Displayed if batch queue is empty
|
||||
052 |CL |15There are no files in your batch queue
|
||||
; &1 = number of files in batch queue
|
||||
053 |CR |09Delete which |01(|071|01-|07|&1|01)|09:
|
||||
053 |CR |09Delete which |01(|071|01-|07|&1|01)|09: |XX
|
||||
; Batch removed from queue &1 = Filename &2 = Size
|
||||
054 |CR|15|&1 |08(|07|&2 bytes|15|08) |07removed from queue.
|
||||
; File upload PASSED text
|
||||
|
@ -149,8 +149,8 @@
|
|||
063 |CR|12Cannot download files in local mode!|DE|DE|DE
|
||||
064 |01[|10þ|01] |09Search all file groups? |11
|
||||
065 |CR|12Start your transfer now.
|
||||
066 UNUSED
|
||||
067 UNUSED
|
||||
066 |CR|14File area "|FB" is password protected.|CR|09Password: |XX
|
||||
067 |CR|12Access denied.
|
||||
068 |CR|12You do not have access to upload here!
|
||||
069 |CR|12Illegal filename.|DE|DE|DE
|
||||
070 |CR|14Searching for duplicate files ...
|
||||
|
@ -192,7 +192,7 @@
|
|||
; &1 = base number &2 = base name &3 = scan base? (Yes or No)
|
||||
093 |07|$R04|&1|15|$R03|&3 |07|$R29|&2
|
||||
094 |CR|12There are no available message bases!
|
||||
095 |09|$D77Ä|CR |09Selection |01[|10##|01]|09, |01[|10##|01-|10##|01]|09, |01[|10?|01/|10List|01]|09, or |01[|10Q|01]|09uit:
|
||||
095 |09|$D77Ä|CR |09Selection |01[|10##|01]|09, |01[|10##|01-|10##|01]|09, |01[|10?|01/|10List|01]|09, or |01[|10Q|01]|09uit: |XX
|
||||
; For strings 096 - 099: &1 = message base name
|
||||
096 |CR |11|&1 will NOT be scanned in QWK packets!|CR
|
||||
097 |CR |11|&1 will be scanned in QWK packets!|CR
|
||||
|
@ -202,9 +202,9 @@
|
|||
; Message base format list:
|
||||
; &1 = base number &2 = base name &3 = total messages
|
||||
101 |15|$L05|&1 |07|$R32|&2
|
||||
102 |09|$D77Ä |CR |09Select Message Base |01[|10?|01/|10List|01]|09:
|
||||
103 UNUSED
|
||||
104 UNUSED
|
||||
102 |09|$D77Ä |CR |09Select Message Base |01[|10?|01/|10List|01]|09: |XX
|
||||
103 |CR|14Message area "|MB" is password protected.|CR|09Password: |XX
|
||||
104 Access denied.
|
||||
105 |CR|12You don't have access to post here!
|
||||
106 |CR|12Use the full screen editor? |11
|
||||
107 |01[|10þ|01] |09Saving Message|01...
|
||||
|
@ -219,13 +219,13 @@
|
|||
; E-mail reader prompt
|
||||
115 |CR|09(A)gain, (P)revious, (N)ext, (R)eply, (D)elete, (J)ump, (Q)uit?
|
||||
; Message read prompt. &1 = Current Msg # &2 = Total Messages
|
||||
116 !to-prmpt MESSAGE
|
||||
116 |CR (|&1 of |&2) Reading Messages (?/Help): |XX
|
||||
117 |CR|12Delete this mail? |11
|
||||
118 |CR|15End of messages.
|
||||
; Post message TO:
|
||||
119 |CR|09To:
|
||||
119 |CR|09To: |XX
|
||||
; post message SUBJ:
|
||||
120 |CR|09Subject:
|
||||
120 |CR|09Subject: |XX
|
||||
; Files still in batch. &1 = # of files
|
||||
121 |CR|BE|14There are |15|&1 |14file(s) in your batch queue.|CR|12Download them now? |11
|
||||
122 |09Saved
|
||||
|
@ -255,7 +255,7 @@
|
|||
; Who's online list format:
|
||||
; &1 = node number &2 = user name &3 = action &4 = location
|
||||
; &5 = baud rate &6 = gender &7 = age &8 = available?
|
||||
139 |07|$R02|&1 |15|$R14|&2|$R30|07|&3
|
||||
139 |07|$R05|&1 |15|$R26|&2 |12|&3
|
||||
; Who's online list footer
|
||||
140 |09|$D77Ä|CR |PA
|
||||
; Last 10 callers list header
|
||||
|
@ -265,23 +265,23 @@
|
|||
; &6 = Baud &8 = Address &9 = Usernote &0 = Email &A-&C = Optional 1-3
|
||||
142 |15|$R27|&1 |07|$R25|&3 |$L04|&2 |&4 |&5
|
||||
; Last 10 callers footer
|
||||
143 |09|$D77Ä|CR|PA
|
||||
143 |09 |$D77Ä|CR|PA
|
||||
; Message from another node:
|
||||
; &1 = Message from &2 = Node user is logged in to.
|
||||
144 |CR|14Message from |&1 on node |&2:|10
|
||||
144 |CL|09|17 ° |15Message from |14|&1 |15on node |14|&2|[K|03|16|CR
|
||||
; Message from another node footer
|
||||
145 |CR|09NodeMsg: (R)eply or (ENTER/Continue): |15
|
||||
146 |CR|09Send message to which node |01[|10?|01/|10List|01]|09:
|
||||
145 |CR|09Node Message: |01[|10R|01]|09eply or |01[|10ENTER|01/|10Continue|01]|09: |15
|
||||
146 |CR|09Send message to which node |01[|10?|01/|10List|01]|09: |XX
|
||||
147 |CR|12No one is logged in on that node!
|
||||
; Send message to node prompt:
|
||||
; &1 = receiver's name &2 = receiver's node number
|
||||
148 |CR|07Enter messsage for |15|&1 |07on node |15|&2|07:
|
||||
149 |CR|12You don't have access to this menu!|CR|CR|PA
|
||||
150 |CR|09Enter Menu Password:
|
||||
151 |CR|09Enter your current password:
|
||||
150 |CR|09Enter Menu Password: |XX
|
||||
151 |CR|09Enter your current password: |XX
|
||||
152 |CR|11(|031|08) |09MM/DD/YY|CR|11(|032|08) |09DD/MM/YY|CR|11(|033|08) |09YY/DD/MM|CR|CRDate Format |08-> |07
|
||||
; &1 = def. page length
|
||||
153 |CR|01[|10þ|01] |09Screen Pause Length |01[|10Enter|01/|10|&1|01]:
|
||||
153 |CR|01[|10þ|01] |09Screen Pause Length |01[|10Enter|01/|10|&1|01]: |XX
|
||||
154 |CR|11(|030|08) |09Ascii (No Color)|CR|11(|031|08) |09Ansi (Color)|CR|CR|09Graphics Mode |08-> |07
|
||||
; User name search
|
||||
; &1 = User's Name
|
||||
|
@ -289,8 +289,8 @@
|
|||
156 |CR|15User not found.|DE|DE|DE
|
||||
157 |CR|12You've reached your calls per day limit. Call back tomorrow!|CR|CR|PA
|
||||
158 |CR|15No quote data available...
|
||||
159 |CR|09Enter first line to quote:
|
||||
160 |09Enter last line to quote :
|
||||
159 |CR|09Enter first line to quote: |XX
|
||||
160 |09Enter last line to quote : |XX
|
||||
; Email reply: not valid user. &1=username
|
||||
161 |CR|11|&1 is not a valid user on this system.
|
||||
; &1 = maximum length of each line &2 = maximum number of lines
|
||||
|
@ -300,7 +300,7 @@
|
|||
; Line editor "backing up to line". &1 = new line number
|
||||
165 |15Backing up to line |&1.|03
|
||||
; Line editor "command" prompt.
|
||||
166 |CR|09Command |01[|10?|01/|10Help|01]|09:
|
||||
166 |CR|09Command |01[|10?|01/|10Help|01]|09: |XX
|
||||
; Line editor "command" prompt help
|
||||
167 |CR|03(|11A|03)bort Message (|11C|03)ontinue Message (|11U|03)pload Message|CR(|11Q|03)uote Message (|11S|03)ave Message (|11H|03)elp|CR(|11T|03)itle Change
|
||||
168 |CR|12Abort message? |11
|
||||
|
@ -308,9 +308,9 @@
|
|||
; Archive list format:
|
||||
; &1 = archive number &2 = archive name &3 = archive extension
|
||||
170 |15|$R02|&1 |10|$R22|&2 |11|&3
|
||||
171 |09|$D30Ä|CR|01[|10þ|01] |09Select Archive #:
|
||||
172 |CR|09Deposit how many minutes |01[|100|01-|10|TL|01]|09:
|
||||
173 |CR|09Withdraw how many minutes |01[|100|01-|10|TB|01]|09:
|
||||
171 |09|$D30Ä|CR|01[|10þ|01] |09Select Archive #: |XX
|
||||
172 |CR|09Deposit how many minutes |01[|100|01-|10|TL|01]|09: |XX
|
||||
173 |CR|09Withdraw how many minutes |01[|100|01-|10|TB|01]|09: |XX
|
||||
; Message group list header
|
||||
174 |CL|CR|$D13 |09Ú|$D54Ä|01¿|CR|$D13 |09³|17 ± |15Message Groups|$D37 |16|01³|CR|$D13 |09À|01|$D54ÄÙ|CR|$D14 |10#|02# |10M|02essage |10G|02roup |10N|02ame|07|$D24 |02A|10reas|CR|$D14 |09|$D54Ä
|
||||
; Message group list format
|
||||
|
@ -318,7 +318,7 @@
|
|||
175 |$D14 |07|$R04|&1 |15|$R41|&2 |12|&3
|
||||
176 |CR|12There are no available message groups.
|
||||
; Message group list prompt
|
||||
177 |$D14 |09|$D54Ä|CR|$D14 |01[|10þ|01] |09Select Message Group |01[|10Enter|01/|101|01]|09:
|
||||
177 |$D14 |09|$D54Ä|CR|$D14 |01[|10þ|01] |09Select Message Group |01[|10Enter|01/|101|01]|09: |XX
|
||||
178 |CR|12Send E-mail to the Sysop? |11
|
||||
; 179-180 are System broadcast messages header/footer
|
||||
; &1 = User who sent system broadcast
|
||||
|
@ -333,7 +333,7 @@
|
|||
; &1 = language number &2 = language description
|
||||
183 |15|$R03|&1|14|&2
|
||||
; Language select footer
|
||||
184 |CR|09Select language:
|
||||
184 |CR|09Select language: |XX
|
||||
; Language file does not exist
|
||||
185 |CR|12Language file does not exist.
|
||||
; Displayed if user's language does not exist.
|
||||
|
@ -368,7 +368,7 @@
|
|||
; &1 = File base number &2 = File base name &3 = Scan? (Yes or No)
|
||||
201 |07|$R04|&1|15|$R03|&3 |07|$R29|&2
|
||||
; Select scanned file bases prompt
|
||||
202 |09|$D77Ä|CR |09Selection |01[|10##|01]|09, |01[|10##|01-|10##|01]|09, |01[|10?|01/|10List|01]|09, or |01[|10Q|01]|09uit:
|
||||
202 |09|$D77Ä|CR |09Selection |01[|10##|01]|09, |01[|10##|01-|10##|01]|09, |01[|10?|01/|10List|01]|09, or |01[|10Q|01]|09uit: |XX
|
||||
; &1 = File base name
|
||||
203 |CR |11|&1 will NOT be scanned in new file scan!|CR
|
||||
; &1 = File base name
|
||||
|
@ -376,7 +376,7 @@
|
|||
; Displayed if file already exists when user trys to upload.
|
||||
205 File already exists.
|
||||
; Displayed before running uploads processor
|
||||
206 |12þ |03Testing file for errors :
|
||||
206 |12þ |03Testing file for errors : |XX
|
||||
; File description input line. &1 = Line number
|
||||
207 |09:
|
||||
; Default file description if none entered/found.
|
||||
|
@ -391,7 +391,7 @@
|
|||
; Lightbar file list: Access to file denied.
|
||||
212 |12File is not available.|PN
|
||||
; Read Message personal prompt. &1 = Current Msg # &2 = Total Messages
|
||||
213 !to-prmpt MESSAGE
|
||||
213 |CR|09[|&1 of |&2] Reading Messages (?/Help): |XX
|
||||
; File group list header
|
||||
214 |CL|CR|$D13 |09Ú|$D54Ä|01¿|CR|$D13 |09³|17 ± |15File Groups|$D40 |16|01³|CR|$D13 |09À|01|$D54ÄÙ|CR|$D14 |10#|02# |10F|02ile |10G|02roup |10N|02ame|07|$D29 |02A|10reas|CR|$D14 |09|$D54Ä
|
||||
; File group list format
|
||||
|
@ -400,7 +400,7 @@
|
|||
; Displayed if there are no available file groups
|
||||
216 |CR|12There are no available file groups.
|
||||
; File group list prompt
|
||||
217 |$D14 |09|$D54Ä|CR|$D14 |01[|10þ|01] |09Select File Group |01[|10Enter|01/|101|01]|09:
|
||||
217 |$D14 |09|$D54Ä|CR|$D14 |01[|10þ|01] |09Select File Group |01[|10Enter|01/|101|01]|09: |XX
|
||||
; nodechat private text: &1 = user name
|
||||
218 |02<|10|&1 |02private|02> |07
|
||||
; Displayed when creating a new files list
|
||||
|
@ -458,14 +458,14 @@
|
|||
; There are no voting questions.
|
||||
243 |12Sorry, there are no voting questions.
|
||||
; Voting booth prompt &1 = Total number of questions
|
||||
244 |08|$D79Ä|CR|09Vote on which question (1-|&1, or Enter/Quit):
|
||||
244 |08|$D79Ä|CR|09Vote on which question (1-|&1, or Enter/Quit): |XX
|
||||
; Voting on question header &1 = Question
|
||||
245 |CL|08|$D79Ä|CR|14Question: (* = Current Vote)|CR|12|&1|CR|08|$D79Ä
|
||||
; Voting on question list format
|
||||
; &1 = Answer # &2 = Answer text &3 = Current Answer?
|
||||
246 |12|&3 |09(|10|$R02|&1|09) |03|&2
|
||||
; Voting prompt
|
||||
247 |08|$D79Ä|CR|09Vote for which answer (Enter/Quit):
|
||||
247 |08|$D79Ä|CR|09Vote for which answer (Enter/Quit): |XX
|
||||
; See voting results?
|
||||
248 |CR|12See results? |11
|
||||
; Vote Result Header
|
||||
|
@ -480,13 +480,13 @@
|
|||
; <Pick this to add your own answer> text
|
||||
252 <Pick this to add your own answer>
|
||||
; Enter your answer prompt
|
||||
253 |CR|09Enter your response:
|
||||
253 |CR|09Enter your response: |XX
|
||||
254 |CR|14This is a forced question. You must answer it to continue.|CR|CR|PA
|
||||
255 |CR|09Enter new file scan date |01[|10|UF|01]|09:
|
||||
255 |CR|09Enter new file scan date |01[|10|UF|01]|09: |XX
|
||||
256 |CR|12Set this date for all file bases? |11
|
||||
; &1 = Date of the updated new scan.
|
||||
257 |CR|07New scan date set to [|15|&1|07].|DE|DE|DE
|
||||
258 |CRDetecting terminal emulation:
|
||||
258 |CRDetecting terminal emulation: |XX
|
||||
259 |TE detected.
|
||||
; Short BBS list header
|
||||
260 |CR|07Õ|08Í[ |15B|07BS |15N|07ame |08]Í|07ÍÍÍÍÍÍÍÍÍÍÍ|08Í[ |15T|07ype |08]|07Í|08Í[ |15A|07ddress |08/ |15P|07hone |08]Í|07ÍÍÍÍÍÍÍ|08Í[ |15S|07oftware |08]Í|07¸
|
||||
|
@ -495,7 +495,7 @@
|
|||
261 |08³ |14|$R25|&1 |09|$R06|&2 |10|$R30|&3 |12|$R10|&4 |08³
|
||||
; Short BBS list footer
|
||||
262 |07ÔÍ|08ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ|07Í;
|
||||
263 |08|$D79Ä|CR|09Results for which question? (Enter/Quit):
|
||||
263 |08|$D79Ä|CR|09Results for which question? (Enter/Quit): |XX
|
||||
; Extended BBS list header
|
||||
264 |CR|14Extended BBS listing:
|
||||
; Extended BBS list information
|
||||
|
@ -505,7 +505,7 @@
|
|||
; verify bbs?
|
||||
266 |CR|12Verify that this BBS is still online? |11
|
||||
; Extended BBS list prompt
|
||||
267 |CR|09(Enter) to Continue, (D)elete, (V)erify, or (Q)uit?
|
||||
267 |CR|09(Enter) to Continue, (D)elete, (V)erify, or (Q)uit? |XX
|
||||
; Who's Online: blank listing. |&1 = Node number
|
||||
268 |07|$R05|&1 Waiting for connection
|
||||
; Matrix login: Create a BBS account?
|
||||
|
@ -515,39 +515,39 @@
|
|||
; Matrix login: Your account is not validated.
|
||||
271 |CR|14Sorry, your account has not been validated.|CR|CR|PA
|
||||
; Matrix login: Enter matrix password
|
||||
272 |CR|14Enter matrix password:
|
||||
272 |CR|14Enter matrix password: |XX
|
||||
; Matrix login: Enter account name prompt
|
||||
273 |CR|03Account name |09:
|
||||
273 |CR|03Account name |09: |XX
|
||||
; Matrix login: enter account password prompt
|
||||
274 |CR|03Account password|09:
|
||||
274 |CR|03Account password|09: |XX
|
||||
; Add question to voting booth question
|
||||
275 |CR|12Add a question to the voting booth? |11
|
||||
; Maximum of 20 voting questions text
|
||||
276 |CR|14Sorry, there is a maximum of 20 voting questions.
|
||||
; Enter new question
|
||||
277 |CL|03Enter new question (Enter/Quit)|CR|09:
|
||||
277 |CR|03Enter new question (Enter/Quit)|CR|09:
|
||||
; Enter choices now. Max 15.
|
||||
278 |CR|10Enter choices now. There are a maximum of 15 choices for each question.|CREnter a blank line when done.|CR
|
||||
; Choice #. &1 = Choice number
|
||||
279 |09Choice #|&1:
|
||||
279 |09Choice #|&1: |XX
|
||||
; Allow users to add answers?
|
||||
280 |CR|12Allow users to add their own answers? |11
|
||||
; Save this question?
|
||||
281 |CR|12Save this voting question? |11
|
||||
; Move message to where?
|
||||
282 |CR|09Move to which base (?/List):
|
||||
282 |CR|09Move to which base (?/List): |XX
|
||||
; Add BBS list: enter phone number
|
||||
283 |03Enter BBS phone number:
|
||||
283 |03Enter BBS phone number: |XX
|
||||
; Add BBS list: enter BBS name
|
||||
284 |03Enter BBS Name :
|
||||
284 |03Enter BBS Name : |XX
|
||||
; Add BBS list: enter BBS location
|
||||
285 |03Enter Location of BBS :
|
||||
285 |03Enter Location of BBS : |XX
|
||||
; Add BBS list: enter sysop name
|
||||
286 |03Enter Sysop Name :
|
||||
286 |03Enter Sysop Name : |XX
|
||||
; Add BBS list: enter max baud rate
|
||||
287 |03Enter Max Baud Rate :
|
||||
287 |03Enter Max Baud Rate : |XX
|
||||
; Add BBS list: enter BBS software
|
||||
288 |03Enter BBS Software :
|
||||
288 |03Enter BBS Software : |XX
|
||||
; File base is mandatory
|
||||
289 |CR |11|FB is marked as mandatory scanning.|CR
|
||||
; Save this BBS entry
|
||||
|
@ -555,19 +555,19 @@
|
|||
; There are no entries in BBS list.
|
||||
291 |CR|12There are no entries in the BBS list.
|
||||
; BBS list: enter text to search for
|
||||
292 |CR|09Enter search text or (ENTER) for All:
|
||||
292 |CR|09Enter search text or (ENTER) for All: |XX
|
||||
; Matrix login: Invalid PW
|
||||
293 |CR|12Invalid password.
|
||||
294 |CR|12Delete this BBS from the list? |11
|
||||
295 |CR|12You did not add this BBS entry.
|
||||
; editing message display
|
||||
296 |CL|14Message Editor|CR|CR|03A. To : |&1|CRB. Subj : |&2|CR|CR|09Command: (!) Edit text, (Q)uit:
|
||||
296 |CL|14Message Editor|CR|CR|03A. To : |&1|CRB. Subj : |&2|CR|CR|09Command: (!) Edit text, (Q)uit: |XX
|
||||
; editing message to
|
||||
297 |CR|09To:
|
||||
297 |CR|09To: |XX
|
||||
; editing message net address
|
||||
298 |CR|09Enter destination address:
|
||||
298 |CR|09Enter destination address: |XX
|
||||
; editing message subject
|
||||
299 |CR|09Subject:
|
||||
299 |CR|09Subject: |XX
|
||||
; editing message save changes
|
||||
300 |CR|12Save changes to message? |11
|
||||
; delete autosig?
|
||||
|
@ -585,7 +585,7 @@
|
|||
308 |CR|12Invisible login? |11
|
||||
309 |CR|12Sorry, this user name is not acceptable.
|
||||
; Message search: search text input
|
||||
310 |CR|03Enter text to search for:
|
||||
310 |CR|03Enter text to search for: |XX
|
||||
; Message search completed
|
||||
311 |CL|15Message search completed.|DE|DE|DE
|
||||
; Lightbar file list: DL limit is exceeded.
|
||||
|
@ -594,9 +594,10 @@
|
|||
313 |12Your download ratio would be exceeded.|PN
|
||||
; Lightbar file list: Batch queue is full.
|
||||
314 |12Your batch queue is full.|PN
|
||||
; UNUSED
|
||||
315 UNUSED
|
||||
; Lightbar Y/N: YES text
|
||||
316 |08++(|23|00 yes |16|08/ |07no |08)++
|
||||
316 |09|17 Y|15es |09|16 N|15o |16
|
||||
; Lightbar Y/N: NO text
|
||||
317 |09 Y|15es |09|17 N|15o |16
|
||||
; Moving message. &1=base name
|
||||
|
@ -619,7 +620,7 @@
|
|||
328 |CR|14Sysop has shelled to DOS. Please wait.
|
||||
329 |14Sysop has returned from DOS. Thank you.
|
||||
; Add to BBS list: telnet
|
||||
330 |03Enter Telnet Address :
|
||||
330 |03Enter Telnet Address : |XX
|
||||
; Start at message index in email? (lightbar msg reader)
|
||||
331 |CR|12Start at e-mail message index? |11
|
||||
; Teleconference user list
|
||||
|
@ -634,14 +635,14 @@
|
|||
; One Liners list format. &1 = Text &2 = Poster Name &3 = Initials
|
||||
337 |07 |$R61|&1 |$L15|&2
|
||||
; Reading forward prompt &1 = Total messages in base
|
||||
338 |CR|03Begin reading at (|111|03-|11|&1|03)|12:
|
||||
338 |CR|03Begin reading at (|111|03-|11|&1|03)|12: |XX
|
||||
; Lightbar file list prompt (SYSOP)
|
||||
339 |01(|07Space|01) |09Flag |01(|07E|01) |09Edit |01(|07N|01) |09Next |01(|07V|01) |09View |01(|07ESC|01) |09Quit |01(|07?|01) |09Help
|
||||
; Lightbar file list uploaders name &1 = user name &3 = downloads
|
||||
340 |$D34 |07+ Uploader: |&1
|
||||
; Line editor quote mode: &1 = line number &2 = line text
|
||||
341 |10|&1|02: |11|$R74|&2
|
||||
342 |CR|09Enter destination address:
|
||||
342 |CR|09Enter destination address: |XX
|
||||
; Upload file name prompt
|
||||
343 |CR|09File Name|CR:
|
||||
; Download file name prompt
|
||||
|
@ -671,19 +672,19 @@
|
|||
; FS editor "abort msg"
|
||||
356 |CR|12Abort message? |11
|
||||
; file list tagging prompt
|
||||
357 |CR|01[|10þ|01] |09Add which file number to batch |01(|07Enter|01/|07Quit|01)|09:
|
||||
357 |CR|01[|10þ|01] |09Add which file number to batch |01(|07Enter|01/|07Quit|01)|09: |XX
|
||||
; file list view prompt
|
||||
358 |CR|01[|10þ|01] |09View contents of which file number |01(|07Enter|01/|07Quit|01)|09:
|
||||
358 |CR|01[|10þ|01] |09View contents of which file number |01(|07Enter|01/|07Quit|01)|09: |XX
|
||||
; Protocol List Header
|
||||
359 |CR|14Available Protocols:|CR
|
||||
; NodeMsg reply &1=from &2=node#
|
||||
360 |CR|07Sending reply to |15|&1 |07on node |15|&2|07:
|
||||
; Add BBS list connection type
|
||||
361 |CR|09Accessible by (D)ialup, (T)elnet, (B)oth:
|
||||
361 |CR|09Accessible by (D)ialup, (T)elnet, (B)oth: |XX
|
||||
; Add BBS: BBS already exists
|
||||
362 |CR|12BBS already exists in list!
|
||||
; Msg xport: local export path
|
||||
363 |CR|09Enter full path/filename to export to:
|
||||
363 |CR|09Enter full path/filename to export to: |XX
|
||||
; info edit: address
|
||||
364 |CR|03Enter your street address.|CR|09:
|
||||
; info edit: city/state
|
||||
|
@ -697,11 +698,11 @@
|
|||
; info edit: bday
|
||||
369 |CR|03Enter your date of birth (|UF):|CR|09:
|
||||
; info edit: gender
|
||||
370 |CR|09Are you (M)ale or (F)emale?
|
||||
370 |CR|09Are you (M)ale or (F)emale? |XX
|
||||
; info edit: date format
|
||||
371 |CR|11(|031|08) |09MM/DD/YY|CR|11(|032|08) |09DD/MM/YY|CR|11(|033|08) |09YY/DD/MM|CR|CRDate Format |08-> |07
|
||||
; info edit: screen length &1 = def page size
|
||||
372 |CR|09Screen Pause Length (Enter/|&1):
|
||||
372 |CR|09Screen Pause Length (Enter/|&1): |XX
|
||||
; info edit: editor type
|
||||
373 |CR|11(|030|08) |14Line Editor|CR|11(|031|08) |14Full Screen Editor|CR|11(|032|08) |14Ask|CR|CR|15E|10d|02itor |15T|10y|02pe|15: |15
|
||||
; info edit: file list type
|
||||
|
@ -711,13 +712,13 @@
|
|||
; Processing uploads
|
||||
376 |CR|14Processing uploads ...|CR
|
||||
; BLIND dupe search
|
||||
377 |12þ |03Searching for duplicate files :
|
||||
377 |12þ |03Searching for duplicate files : |XX
|
||||
; BLIND dupe found
|
||||
378 Dupe found.
|
||||
; BLIND no dupe found
|
||||
379 None.
|
||||
; importing file_id.diz
|
||||
380 |12þ |03Importing file description :
|
||||
380 |12þ |03Importing file description : |XX
|
||||
; file_id found
|
||||
381 Found.
|
||||
; no file_id
|
||||
|
@ -733,11 +734,11 @@
|
|||
; Mass mail prompt
|
||||
387 |CL|09Send mass mail by|09:|CR|CR|11(|031|08) |09ACS level|CR|11(|032|08)|09 List of users|CR|11(|033|08)|09 All users|CR|11(|03Q|08)|09 Quit|CR|CRCommand |08-> |07
|
||||
; Mass mail ACS prompt
|
||||
388 |CREnter ACS level:
|
||||
388 |CREnter ACS level: |XX
|
||||
; Mass mail name info
|
||||
389 |CR|11Enter user name, or search string.|CREnter a blank line to end.|CR
|
||||
; Mass mail name prompt &1 = # of users in list
|
||||
390 |CR|11|&1 |03users in list. Enter user name:
|
||||
390 |CR|11|&1 |03users in list. Enter user name: |XX
|
||||
; Mass mail name list
|
||||
391 |CR|09User mailing list:|CR
|
||||
; Mass mail name format &1 = name
|
||||
|
@ -749,7 +750,7 @@
|
|||
; Node unavilable
|
||||
395 |CR|14Sorry, this user is marked as unavailable.
|
||||
; Msg search prompt
|
||||
396 |CR|03Enter search string:
|
||||
396 |CR|03Enter search string: |XX
|
||||
; Info edit: Msg Read type
|
||||
397 |CR|11(|030|08) |14Normal |15: |10View messages page by page|CR|11(|031|08) |14LightBar |15: |10Scroll message lists with arrow keys|CR|CR|15S|10ele|02ct |15T|10yp|02e: |15
|
||||
; New user: Msg Read type
|
||||
|
@ -766,15 +767,15 @@
|
|||
; Ansi msg read: delete msg
|
||||
402 |CR|12Delete this mail?
|
||||
; Ansi msg read: jump to msg: &1 = cur msg num &2 = high msg num
|
||||
403 |CR|09Jump to which message? (1-|&2):
|
||||
403 |CR|09Jump to which message? (1-|&2): |XX
|
||||
; Ansi msg read: scan toggle &1 = message base name
|
||||
404 |CR|11|&1 will NOT be scanned in new message scan!
|
||||
405 |CR|11|&1 will be scanned in new message scan!
|
||||
406 |CR|11|MB is marked as mandatory reading!
|
||||
; Reply msg To: standard
|
||||
407 |CR|09To:
|
||||
407 |CR|09To: |XX
|
||||
; Reply msg To: lightbar
|
||||
408 |CR|09To:
|
||||
408 |CR|09To: |XX
|
||||
; User edit: Hotkeys
|
||||
409 |CR|12Use hot-key input?
|
||||
; New user: Hotkeys
|
||||
|
@ -787,7 +788,7 @@
|
|||
; ansi msg read: local export
|
||||
415 Export to filepath/filename|CR:
|
||||
; mass email subj: prompt
|
||||
416 |CR|09Subject:
|
||||
416 |CR|09Subject: |XX
|
||||
; General Invalid PW
|
||||
417 |CR|12Invalid password.
|
||||
; INFO EDIT: Do not match
|
||||
|
@ -834,7 +835,7 @@
|
|||
; post on msg base (lightbar reader)
|
||||
438 |CR|12Post a message?
|
||||
; new user: enter email address
|
||||
439 |01[|10þ|01] |09Enter your e-mail address ->
|
||||
439 |01[|10þ|01] |09Enter your e-mail address -> |XX
|
||||
; info edit: enter email address
|
||||
440 |CR|09Enter E-mail address|CR:
|
||||
; new user: enter user note
|
||||
|
@ -842,23 +843,23 @@
|
|||
; info edit: enter user note
|
||||
442 |CR|09Enter your desired user note|CR:
|
||||
; new user: option 1
|
||||
443 |01[|10þ|01] |09How did you hear of this BBS ->
|
||||
443 |01[|10þ|01] |09How did you hear of this BBS -> |XX
|
||||
; info edit: option 1
|
||||
444 |CR|09Enter optional field 1:
|
||||
444 |CR|09Enter optional field 1: |XX
|
||||
; new user: option 2
|
||||
445 |CR|09Enter optional field 2:
|
||||
445 |CR|09Enter optional field 2: |XX
|
||||
; info edit: option 2
|
||||
446 |CR|09Enter optional field 2:
|
||||
446 |CR|09Enter optional field 2: |XX
|
||||
; new user: option 3
|
||||
447 |CR|09Enter optional field 3:
|
||||
447 |CR|09Enter optional field 3: |XX
|
||||
; info edit: option 3
|
||||
448 |CR|09Enter optional field 3:
|
||||
448 |CR|09Enter optional field 3: |XX
|
||||
; file new scan setting footer
|
||||
449
|
||||
; private post (email) TO:
|
||||
450 |CR|09To:
|
||||
450 |CR|09To: |XX
|
||||
; reply msg SUBJ
|
||||
451 |CR|09Subject:
|
||||
451 |CR|09Subject: |XX
|
||||
; standard quote header
|
||||
452 |15Quote mode: Select a range of text to quote|CR
|
||||
453 |09|$D77Ä|CR|PA
|
||||
|
@ -881,14 +882,13 @@
|
|||
; filename greater than 70 chars prompt
|
||||
461 |CR|12File of this name already exists.|CR|CR|09Enter new file name (max 70 chars)|CR:
|
||||
; line editor edit subject
|
||||
462 |CR|09Enter new subject:
|
||||
462 |CR|09Enter new subject: |XX
|
||||
; FS editor edit subject
|
||||
463 |CR|09Enter new subject:
|
||||
463 |CR|09Enter new subject: |XX
|
||||
; msgtext quote header &1=date &2=from &3=initials
|
||||
464 On |&1, |&2 said the following...
|
||||
; new email node msg: &1=from &2=subj
|
||||
465 You've just received new e-mail from |&1.
|
||||
|
||||
; ansi gallery: Ansi is required to use this prompt
|
||||
466 |CRSorry, this gallery requires ANSI graphics|CR|CR|PA
|
||||
; ansi gallery: Deselected file in list (bar OFF)
|
||||
|
@ -908,7 +908,7 @@
|
|||
; &6=sauce group &7=filetime
|
||||
470 |[X02|15|17 |$R49|&1 |12<DIRECTORY>|$D15 |XX
|
||||
; ansi gallery: Current path update prompt (when switching directories)
|
||||
; set to blank to not display a path
|
||||
; set to blank to not display a path (automatically excludes the root)
|
||||
; &1 = current path &2 = # of files in path
|
||||
471 |[X08|[Y05|15|16|$R70|&1
|
||||
; ansi gallery: Percent bar update (when redrawing page)
|
||||
|
@ -921,7 +921,7 @@
|
|||
; ansi gallery: Command prompt for ! (only download for now)
|
||||
474 |CR|12Download |&1? |XX
|
||||
; Password inquiry prompt
|
||||
475 |CR|12Send an e-mail about your forgetten password? |XX
|
||||
475 |CR|12Send a password inquiry message to the SysOp? |XX
|
||||
; Displayed when account expired down to a security level > 0
|
||||
476 |CR|14Your account has expired. Downgrading security to |XS.
|
||||
; Displayed when account expired down to level 0 (delete)
|
||||
|
|
|
@ -58,7 +58,7 @@ Const
|
|||
|
||||
colEditBorder = 25; { 31 }
|
||||
colEditHeader = 31; { 31 }
|
||||
colEditStatus = 19; { 19 }
|
||||
colEditStatus = 9 + 1 * 16;
|
||||
colEditPosBar = 9 + 1 * 16;
|
||||
|
||||
Type
|
||||
|
|
|
@ -22,7 +22,7 @@ End;
|
|||
|
||||
Function Char2VarType (C: Char) : TIdentTypes;
|
||||
Begin
|
||||
Case UpCase(c) of
|
||||
Case UpCase(C) of
|
||||
'S' : Result := iString;
|
||||
'C' : Result := iChar;
|
||||
'B' : Result := iByte;
|
||||
|
|
|
@ -2,14 +2,6 @@ Unit MPL_Compile;
|
|||
|
||||
{$I M_OPS.PAS}
|
||||
|
||||
// OKAY SO iRECORD HAS DATAPTR ALLOCATED TO ITS FULL SIZE.
|
||||
// WHEN A RECORD VARIABLE (iRECORD) is DEFINED, EACH VAR
|
||||
// IS CREATED WITH A POINTER TO iRECORD.DATAPTR[OFFSET]
|
||||
// IRECORD THEN CAN BE REFERENCED AS EXPECTED.
|
||||
// ALSO NEED TO FIGURE OUT SIZEOF TOO
|
||||
|
||||
// REMOVE VARTYPE2CHAR ETC AND USE ORDINAL
|
||||
|
||||
Interface
|
||||
|
||||
Uses
|
||||
|
@ -47,22 +39,15 @@ Type
|
|||
TParserUpdateProc = Procedure (Mode: TParserUpdateInfo);
|
||||
|
||||
TParserSourceFile = Record
|
||||
DataFile : TCharFile;
|
||||
ColCur : Byte;
|
||||
ColLast : Byte;
|
||||
ColSaved : Byte;
|
||||
LineCur : Word;
|
||||
LineSaved : Word;
|
||||
Position : LongInt;
|
||||
PosSaved : LongInt;
|
||||
Size : LongInt;
|
||||
ColLastSaved : Byte;
|
||||
SavedInfo : TParserUpdateInfo;
|
||||
DataFile : TCharFile;
|
||||
Position : LongInt;
|
||||
PosSaved : LongInt;
|
||||
Size : LongInt;
|
||||
SavedInfo : TParserUpdateInfo;
|
||||
End;
|
||||
|
||||
TParserVarInfoRec = Record
|
||||
Ident : Array[1..mplMaxVarDeclare] of String[mplMaxIdentLen];
|
||||
Prefix : String[mplMaxIdentLen];
|
||||
vType : TIdentTypes;
|
||||
ArrDem : Byte;
|
||||
ArrStart : Array[1..mplMaxArrayDem] of LongInt;
|
||||
|
@ -71,14 +56,16 @@ Type
|
|||
StrLen : Byte;
|
||||
VarSize : LongInt;
|
||||
DataSize : LongInt;
|
||||
RecID : Word;
|
||||
End;
|
||||
|
||||
PRecordRec = ^TRecordRec;
|
||||
TRecordRec = Record
|
||||
Ident : String[mplMaxIdentLen];
|
||||
RecID : Word;
|
||||
Fields : Array[1..mplMaxRecFields] of TParserVarInfoRec;
|
||||
NumFields : Word;
|
||||
// RecSize : Word;
|
||||
DataSize : LongInt;
|
||||
End;
|
||||
|
||||
PConstRec = ^TConstRec;
|
||||
|
@ -106,6 +93,7 @@ Type
|
|||
CurRecNum : Word;
|
||||
CurConstNum : Word;
|
||||
CurVarID : Word;
|
||||
CurRecID : Word;
|
||||
UsesUSER : Boolean;
|
||||
UsesCFG : Boolean;
|
||||
UsesMBASE : Boolean;
|
||||
|
@ -136,7 +124,7 @@ Type
|
|||
// CODE PROCESSING
|
||||
Function GetDataSize (Info: TParserVarInfoRec) : LongInt;
|
||||
Procedure CreateVariable (Var Info: TParserVarInfoRec);
|
||||
Procedure ParseVariableInfo (Param: Boolean; IsRec: Boolean; Var Info: TParserVarInfoRec);
|
||||
Function ParseVariableInfo (Param: Boolean; IsRec: Boolean; Var Info: TParserVarInfoRec) : LongInt;
|
||||
Procedure ParseIdent;
|
||||
Procedure ParseBlock (VarStart: Word; OneLine, CheckBlock, IsRepeat: Boolean);
|
||||
|
||||
|
@ -144,9 +132,10 @@ Type
|
|||
Procedure ParseVarString;
|
||||
Procedure ParseVarFile;
|
||||
Procedure ParseVarBoolean;
|
||||
Procedure ParseVarChar; //combine with string?
|
||||
Procedure ParseVarChar;
|
||||
Procedure ParseVariable (VT: TIdentTypes);
|
||||
Procedure ParseArray (VN: Word);
|
||||
Function ParseElement (VN: Word; TypeCheck: Boolean; VT: TIdentTypes) : TIdentTypes;
|
||||
|
||||
Procedure DefineRecordType;
|
||||
Procedure DefineVariable;
|
||||
|
@ -196,6 +185,7 @@ Begin
|
|||
Ch := #0;
|
||||
IdentStr := '';
|
||||
CurVarID := 0;
|
||||
CurRecID := 0;
|
||||
CurFile := 0;
|
||||
CurVarNum := 0;
|
||||
CurGotoNum := 0;
|
||||
|
@ -271,10 +261,23 @@ Begin
|
|||
|
||||
UpdateInfo.ErrorType := ErrNum;
|
||||
UpdateInfo.ErrorText := GetErrorMessage(Str);
|
||||
UpdateInfo.ErrorLine := InFile[CurFile].LineCur;
|
||||
UpdateInfo.ErrorCol := InFile[CurFile].ColCur;
|
||||
UpdateInfo.ErrorLine := 1;
|
||||
UpdateInfo.ErrorCol := 0;
|
||||
|
||||
If UpdateInfo.ErrorLine < 1 Then UpdateInfo.ErrorLine := 1;
|
||||
InFile[CurFile].DataFile.Seek(0);
|
||||
|
||||
While Not InFile[CurFile].DataFile.EOF And (InFile[CurFile].DataFile.FilePos < InFile[CurFile].Position) Do Begin
|
||||
Case InFile[CurFile].DataFile.Read of
|
||||
#10 : Begin
|
||||
Inc (UpdateInfo.ErrorLine);
|
||||
UpdateInfo.ErrorCol := 0;
|
||||
End;
|
||||
#09,
|
||||
#13 : ;
|
||||
Else
|
||||
Inc (UpdateInfo.ErrorCol);
|
||||
End;
|
||||
End;
|
||||
End;
|
||||
|
||||
Function TParserEngine.CurFilePos : LongInt;
|
||||
|
@ -358,6 +361,9 @@ Begin
|
|||
If CurRecNum = 0 Then Exit;
|
||||
|
||||
Repeat
|
||||
writeln('rec ident: ', recdata[count]^.ident);
|
||||
writeln('str: ', str);
|
||||
|
||||
If strUpper(RecData[Count]^.Ident) = Str Then Begin
|
||||
Result := Count;
|
||||
Exit;
|
||||
|
@ -400,7 +406,6 @@ Begin
|
|||
UpdateInfo.Percent := Percent;
|
||||
UpdateInfo.FilePosition := InFile[CurFile].Position;
|
||||
UpdateInfo.FileSize := InFile[CurFile].Size;
|
||||
UpdateInfo.FileLine := InFile[CurFile].LineCur;
|
||||
End;
|
||||
|
||||
UpdateProc(UpdateInfo);
|
||||
|
@ -414,9 +419,8 @@ Begin
|
|||
|
||||
If Not InFile[CurFile].DataFile.Eof Then Begin
|
||||
Ch := InFile[CurFile].DataFile.Read;
|
||||
Inc (InFile[CurFile].Position);
|
||||
|
||||
If Not (Ch in [#10, #13]) Then Inc(InFile[CurFile].ColCur);
|
||||
Inc (InFile[CurFile].Position);
|
||||
End Else
|
||||
If InFile[CurFile].DataFile.Eof and (CurFile > 1) Then Begin
|
||||
CloseSourceFile;
|
||||
|
@ -434,42 +438,15 @@ Begin
|
|||
With InFile[CurFile] Do Begin
|
||||
If Position <= 1 Then Exit;
|
||||
|
||||
Dec (Position);
|
||||
Dec (ColCur);
|
||||
Dec (Position);
|
||||
|
||||
DataFile.Seek (DataFile.FilePos - 1);
|
||||
|
||||
If ColCur < 1 Then Begin
|
||||
ColCur := ColLast;
|
||||
ColLast := 1;
|
||||
|
||||
Dec (LineCur);
|
||||
End;
|
||||
End;
|
||||
End;
|
||||
|
||||
Function TParserEngine.IsEndOfLine : Boolean;
|
||||
Begin
|
||||
Result := False;
|
||||
|
||||
Case Ch of
|
||||
#10,
|
||||
#13 : Begin
|
||||
With InFile[CurFile] Do Begin
|
||||
Inc (LineCur);
|
||||
|
||||
ColLast := ColCur;
|
||||
ColCur := 1;
|
||||
Result := True;
|
||||
End;
|
||||
|
||||
If Ch = #13 Then Begin
|
||||
GetChar;
|
||||
|
||||
If Not (Ch in [#10]) Then PrevChar;
|
||||
End;
|
||||
End;
|
||||
End;
|
||||
Result := Ch in [#10, #13];
|
||||
End;
|
||||
|
||||
Procedure TParserEngine.NextChar;
|
||||
|
@ -496,10 +473,9 @@ Begin
|
|||
|
||||
While Not UpdateInfo.ErrorType <> 0 Do Begin
|
||||
Case Ch of
|
||||
// SKIP CR/LF...
|
||||
#10,
|
||||
#13 : IsEndOfLine;
|
||||
// SKIP WHITESPACE
|
||||
#10,
|
||||
#13,
|
||||
#09,
|
||||
#32,
|
||||
#59 : {ignore};
|
||||
|
@ -519,8 +495,6 @@ Begin
|
|||
'*' : Repeat
|
||||
GetChar;
|
||||
|
||||
IsEndOfLine;
|
||||
|
||||
Case Ch of
|
||||
'*' : Begin
|
||||
GetChar;
|
||||
|
@ -584,6 +558,7 @@ Begin
|
|||
End;
|
||||
1 : Begin
|
||||
BlockCount := 1;
|
||||
|
||||
Repeat
|
||||
GetChar;
|
||||
|
||||
|
@ -685,7 +660,7 @@ Begin
|
|||
|
||||
If UpdateInfo.ErrorType <> 0 Then Exit;
|
||||
|
||||
While (UpdateInfo.ErrorType = 0) And ((Ch in ChIdent2) or (Ch = '.')) Do Begin
|
||||
While (UpdateInfo.ErrorType = 0) And (Ch in ChIdent2) Do Begin
|
||||
IdentStr := IdentStr + Ch;
|
||||
GetChar;
|
||||
End;
|
||||
|
@ -707,20 +682,14 @@ End;
|
|||
Procedure TParserEngine.SavePosition;
|
||||
Begin
|
||||
With InFile[CurFile] Do Begin
|
||||
ColSaved := ColCur;
|
||||
LineSaved := LineCur;
|
||||
PosSaved := DataFile.FilePos + 1;
|
||||
ColLastSaved := ColLast;
|
||||
PosSaved := DataFile.FilePos + 1;
|
||||
End;
|
||||
End;
|
||||
|
||||
Procedure TParserEngine.LoadPosition;
|
||||
Begin
|
||||
With InFile[CurFile] Do Begin
|
||||
ColCur := ColSaved;
|
||||
LineCur := LineSaved;
|
||||
Position := PosSaved;
|
||||
ColLast := ColLastSaved;
|
||||
|
||||
DataFile.Seek (Position - 1);
|
||||
End;
|
||||
|
@ -743,8 +712,10 @@ Var
|
|||
Begin
|
||||
If VarData[VN]^.ArrPos > 0 Then Begin
|
||||
GetStr(tkw[wOpenArray], True, False);
|
||||
For X := 1 to VarData[vn]^.ArrPos Do Begin
|
||||
|
||||
For X := 1 to VarData[VN]^.ArrPos Do Begin
|
||||
ParseVarNumber;
|
||||
|
||||
If X < VarData[VN]^.ArrPos Then
|
||||
GetStr(tkw[wArrSep], True, False)
|
||||
Else
|
||||
|
@ -753,6 +724,65 @@ Begin
|
|||
End;
|
||||
End;
|
||||
|
||||
Function TParserEngine.ParseElement (VN: Word; TypeCheck: Boolean; VT: TIdentTypes) : TIdentTypes;
|
||||
Var
|
||||
Element : String;
|
||||
RecNum : Word;
|
||||
Count : Word;
|
||||
Found : Boolean;
|
||||
Offset : LongInt;
|
||||
X : Word;
|
||||
Begin
|
||||
Result := VarData[VN]^.vType;
|
||||
|
||||
If Result <> iRecord Then Exit;
|
||||
|
||||
NextChar;
|
||||
|
||||
If Ch <> '.' Then Begin
|
||||
PrevChar;
|
||||
Exit;
|
||||
End;
|
||||
|
||||
GetIdent(False);
|
||||
|
||||
Element := strUpper(IdentStr);
|
||||
Offset := 0;
|
||||
|
||||
For Count := 1 to RecData[VarData[VN]^.RecID]^.NumFields Do Begin
|
||||
If strUpper(RecData[VarData[VN]^.RecID]^.Fields[Count].Ident[1]) = Element Then Begin
|
||||
Found := True;
|
||||
Result := RecData[VarData[VN]^.RecID]^.Fields[Count].vType;
|
||||
|
||||
//VarType
|
||||
//Offset
|
||||
//Size
|
||||
|
||||
If RecData[VarData[VN]^.RecID]^.Fields[Count].ArrDem > 0 Then Begin
|
||||
GetStr(tkw[wOpenArray], True, False);
|
||||
|
||||
For X := 1 to RecData[VarData[VN]^.RecID]^.Fields[Count].ArrDem Do Begin
|
||||
ParseVarNumber;
|
||||
|
||||
If X < RecData[VarData[VN]^.RecID]^.Fields[Count].ArrDem Then
|
||||
GetStr(tkw[wArrSep], True, False)
|
||||
Else
|
||||
GetStr(tkw[wCloseArray], True, False);
|
||||
End;
|
||||
End;
|
||||
|
||||
// writeln('creating ', recdata[vardata[vn]^.recid]^.fields[count].varsize, ' at ', offset);
|
||||
|
||||
Break;
|
||||
End;
|
||||
|
||||
Inc (Offset, RecData[VarData[VN]^.RecID]^.Fields[Count].VarSize);
|
||||
End;
|
||||
|
||||
If Not Found Then
|
||||
Error (mpsUnknownIdent, '');
|
||||
End;
|
||||
|
||||
Procedure TParserEngine.NewNumberCrap;
|
||||
var
|
||||
IsDecimal : Boolean;
|
||||
|
@ -853,6 +883,7 @@ begin
|
|||
|
||||
If GetIdent(False) Then Begin
|
||||
VarNum := FindConst(IdentStr);
|
||||
|
||||
If VarNum > 0 Then Begin
|
||||
If Not (ConstData[VarNum]^.vType in vNums) Then
|
||||
Error (mpsTypeMismatch, '');
|
||||
|
@ -864,7 +895,7 @@ begin
|
|||
If VarNum = 0 Then
|
||||
Error (mpsUnknownIdent, IdentStr)
|
||||
Else
|
||||
If Not (VarData[VarNum]^.vType in vNums) Then
|
||||
If Not (VarData[VarNum]^.vType in vNums) And (VarData[VarNum]^.vType <> iRecord) Then
|
||||
Error (mpsTypeMismatch, '');
|
||||
|
||||
If UpdateInfo.ErrorType <> 0 Then Exit;
|
||||
|
@ -872,9 +903,10 @@ begin
|
|||
If VarData[VarNum]^.Proc Then
|
||||
ExecuteProcedure (VarNum, True)
|
||||
Else Begin
|
||||
OutString (Char(opVariable));
|
||||
OutWord (VarData[VarNum]^.VarID);
|
||||
ParseArray (VarNum);
|
||||
OutString (Char(opVariable));
|
||||
OutWord (VarData[VarNum]^.VarID);
|
||||
ParseArray (VarNum);
|
||||
ParseElement (VarNum, True, iLongInt);
|
||||
End;
|
||||
End;
|
||||
End Else
|
||||
|
@ -973,16 +1005,16 @@ Begin
|
|||
If Not (ConstData[VarNum]^.vType in vStrings) Then
|
||||
Error (mpsTypeMismatch, '');
|
||||
|
||||
OutString(Char(opOpenString));
|
||||
OutString(ConstData[VarNum]^.Data[0]);
|
||||
OutString(ConstData[VarNum]^.Data);
|
||||
OutString (Char(opOpenString));
|
||||
OutString (ConstData[VarNum]^.Data[0]);
|
||||
OutString (ConstData[VarNum]^.Data);
|
||||
End Else Begin
|
||||
VarNum := FindVariable(IdentStr);
|
||||
|
||||
If VarNum = 0 Then
|
||||
Error (mpsUnknownIdent, IdentStr)
|
||||
Else
|
||||
If Not (VarData[VarNum]^.vType in vStrings) Then
|
||||
If Not (VarData[VarNum]^.vType in vStrings) And (VarData[VarNum]^.vType <> iRecord) Then
|
||||
Error (mpsTypeMismatch, '');
|
||||
|
||||
If UpdateInfo.ErrorType <> 0 Then Exit;
|
||||
|
@ -990,9 +1022,10 @@ Begin
|
|||
If VarData[VarNum]^.Proc Then
|
||||
ExecuteProcedure(VarNum, True)
|
||||
Else Begin
|
||||
OutString (Char(opVariable));
|
||||
OutWord (VarData[VarNum]^.VarID);
|
||||
ParseArray (VarNum);
|
||||
OutString (Char(opVariable));
|
||||
OutWord (VarData[VarNum]^.VarID);
|
||||
ParseArray (VarNum);
|
||||
ParseElement (VarNum, True, iChar);
|
||||
End;
|
||||
End;
|
||||
|
||||
|
@ -1112,7 +1145,7 @@ Begin
|
|||
If VarNum = 0 Then
|
||||
Error (mpsUnknownIdent, IdentStr)
|
||||
Else
|
||||
If Not (VarData[VarNum]^.vType in vStrings) Then
|
||||
If Not (VarData[VarNum]^.vType in vStrings) And (VarData[VarNum]^.vType <> iRecord) Then
|
||||
Error (mpsTypeMismatch, '');
|
||||
|
||||
If UpdateInfo.ErrorType <> 0 Then Exit;
|
||||
|
@ -1120,9 +1153,10 @@ Begin
|
|||
If VarData[VarNum]^.Proc Then
|
||||
ExecuteProcedure(VarNum, True)
|
||||
Else Begin
|
||||
OutString (Char(opVariable));
|
||||
OutWord (VarData[VarNum]^.VarID);
|
||||
ParseArray (VarNum);
|
||||
OutString (Char(opVariable));
|
||||
OutWord (VarData[VarNum]^.VarID);
|
||||
ParseArray (VarNum);
|
||||
ParseElement (VarNum, True, iString);
|
||||
End;
|
||||
End;
|
||||
|
||||
|
@ -1215,15 +1249,16 @@ Begin
|
|||
If VarNum = 0 Then
|
||||
Error (mpsUnknownIdent, IdentStr)
|
||||
Else
|
||||
If VarData[VarNum]^.vType <> iBool Then
|
||||
If (VarData[VarNum]^.vType <> iBool) And (VarData[VarNum]^.vType <> iRecord) Then
|
||||
Error (mpsTypeMismatch, '')
|
||||
Else
|
||||
If VarData[VarNum]^.Proc Then
|
||||
ExecuteProcedure(VarNum, True)
|
||||
Else Begin
|
||||
OutString (Char(opVariable));
|
||||
OutWord (VarData[VarNum]^.VarID);
|
||||
ParseArray (VarNum);
|
||||
OutString (Char(opVariable));
|
||||
OutWord (VarData[VarNum]^.VarID);
|
||||
ParseArray (VarNum);
|
||||
ParseElement (VarNum, True, iBool);
|
||||
End;
|
||||
End;
|
||||
End;
|
||||
|
@ -1455,7 +1490,7 @@ Begin
|
|||
Result := DimSize;
|
||||
End;
|
||||
|
||||
Procedure TParserEngine.ParseVariableInfo (Param: Boolean; IsRec: Boolean; Var Info: TParserVarInfoRec);
|
||||
Function TParserEngine.ParseVariableInfo (Param: Boolean; IsRec: Boolean; Var Info: TParserVarInfoRec) : LongInt;
|
||||
|
||||
Function ParseNum : LongInt;
|
||||
Var
|
||||
|
@ -1547,41 +1582,41 @@ Procedure TParserEngine.ParseVariableInfo (Param: Boolean; IsRec: Boolean; Var I
|
|||
If IsRec Then Error(mpsSyntaxError, 'Cannot define file in record');
|
||||
Info.vType := iFile;
|
||||
End Else Begin
|
||||
Count := FindRecord(IdentStr);
|
||||
Info.RecID := FindRecord(IdentStr);
|
||||
|
||||
If Count = 0 Then
|
||||
If Info.RecID = 0 Then
|
||||
Error(mpsUnknownIdent, IdentStr)
|
||||
Else If IsRec Then
|
||||
Error(mpsSyntaxError, 'Cannot define record in record')
|
||||
Else Begin
|
||||
Info.vType := iRecord;
|
||||
Info.Prefix := Info.Ident[1] + '.';
|
||||
Info.StrLen := Count;
|
||||
|
||||
// this crap needs to go?
|
||||
Info.vType := iRecord;
|
||||
End;
|
||||
End;
|
||||
|
||||
If Not Param Then
|
||||
If Info.vType = iString Then
|
||||
If GetStr(tkw[wOpenStrSize], False, False) Then Begin
|
||||
Info.StrLen := ParseNum;
|
||||
GetStr(tkw[wCloseStrSize], True, False);
|
||||
End Else
|
||||
Info.StrLen := 255;
|
||||
Case Info.vType of
|
||||
iString : Begin
|
||||
Info.StrLen := 255;
|
||||
|
||||
If Info.vType <> iRecord Then Begin
|
||||
If Info.vType = iString Then
|
||||
Info.VarSize := Info.StrLen + 1
|
||||
Else
|
||||
Info.VarSize := GetVarSize(Info.vType);
|
||||
If Not Param Then
|
||||
If GetStr(tkw[wOpenStrSize], False, False) Then Begin
|
||||
Info.StrLen := ParseNum;
|
||||
GetStr(tkw[wCloseStrSize], True, False);
|
||||
End;
|
||||
|
||||
If Info.ArrDem > 0 Then
|
||||
Info.VarSize := GetDataSize(Info);
|
||||
|
||||
If Info.VarSize > mplMaxDataSize Then
|
||||
Error (mpsDataTooBig, '');
|
||||
Info.VarSize := Info.StrLen + 1;
|
||||
End;
|
||||
iRecord : Info.VarSize := RecData[Info.RecID]^.DataSize;
|
||||
Else
|
||||
Info.VarSize := GetVarSize(Info.vType);
|
||||
End;
|
||||
|
||||
If Info.ArrDem > 0 Then
|
||||
Info.VarSize := GetDataSize(Info);
|
||||
|
||||
If Info.VarSize > mplMaxDataSize Then
|
||||
Error (mpsDataTooBig, '');
|
||||
|
||||
// writeln('parsed variable of size: ' , info.varsize);
|
||||
End;
|
||||
|
||||
Begin
|
||||
|
@ -1743,46 +1778,10 @@ End;
|
|||
|
||||
Procedure TParserEngine.DefineVariable;
|
||||
Var
|
||||
Info : TParserVarInfoRec;
|
||||
BaseRec : TParserVarInfoRec;
|
||||
Count : LongInt;
|
||||
Info : TParserVarInfoRec;
|
||||
Begin
|
||||
ParseVariableInfo(False, False, Info);
|
||||
|
||||
If Info.vType = iRecord Then Begin
|
||||
OutString (Char(opTypeRec));
|
||||
OutWord (RecData[Info.StrLen]^.NumFields);
|
||||
|
||||
BaseRec := Info;
|
||||
|
||||
BaseRec.VarSize := 0;
|
||||
BaseRec.ArrDem := Info.ArrDem;
|
||||
BaseRec.ArrStart := Info.ArrStart;
|
||||
BaseRec.ArrEnd := Info.ArrEnd;
|
||||
BaseRec.Prefix := '';
|
||||
BaseRec.NumVars := 1;
|
||||
BaseRec.StrLen := 0;
|
||||
|
||||
For Count := 1 to RecData[Info.StrLen]^.NumFields Do
|
||||
Inc (BaseRec.VarSize, RecData[Info.StrLen]^.Fields[Count].VarSize);
|
||||
|
||||
If BaseRec.VarSize > mplMaxDataSize Then Begin
|
||||
Error (mpsDataTooBig, '');
|
||||
Exit;
|
||||
End;
|
||||
|
||||
BaseRec.DataSize := GetDataSize(BaseRec);
|
||||
|
||||
OutWord (BaseRec.DataSize);
|
||||
|
||||
CreateVariable(BaseRec);
|
||||
|
||||
For Count := 1 to RecData[Info.StrLen]^.NumFields Do Begin
|
||||
RecData[Info.StrLen]^.Fields[Count].Prefix := Info.Prefix;
|
||||
CreateVariable(RecData[Info.StrLen]^.Fields[Count]);
|
||||
End;
|
||||
End Else
|
||||
CreateVariable(Info);
|
||||
ParseVariableInfo (False, False, Info);
|
||||
CreateVariable (Info);
|
||||
End;
|
||||
|
||||
Procedure TParserEngine.CreateVariable (Var Info: TParserVarInfoRec);
|
||||
|
@ -1795,6 +1794,11 @@ Begin
|
|||
If (Info.vType = iString) and (Info.StrLen > 0) Then
|
||||
OutString(Char(opStrSize) + Char(opOpenNum) + strI2S(Info.StrLen) + Char(opCloseNum));
|
||||
|
||||
If Info.vType = iRecord Then Begin
|
||||
OutString (Char(opTypeRec));
|
||||
OutWord (Info.DataSize);
|
||||
End;
|
||||
|
||||
If Info.ArrDem = 0 Then
|
||||
OutString(Char(opVarNormal))
|
||||
Else Begin
|
||||
|
@ -1817,10 +1821,11 @@ Begin
|
|||
OutWord (CurVarID);
|
||||
Inc (CurVarID);
|
||||
|
||||
Ident := Info.Prefix + Info.Ident[Count];
|
||||
Ident := Info.Ident[Count];
|
||||
vType := Info.vType;
|
||||
Proc := False;
|
||||
ArrPos := Info.ArrDem;
|
||||
RecID := Info.RecID;
|
||||
NumParams := 0;
|
||||
|
||||
FillChar(Params, SizeOf(Params), 0);
|
||||
|
@ -1838,10 +1843,9 @@ Begin
|
|||
End;
|
||||
|
||||
Procedure TParserEngine.DefineRecordType;
|
||||
// get rid of this crap kludge and do records the right way...
|
||||
Var
|
||||
Ident : String;
|
||||
Info : TParserVarInfoRec;
|
||||
Ident : String;
|
||||
Info : TParserVarInfoRec;
|
||||
Begin
|
||||
GetIdent(False);
|
||||
|
||||
|
@ -1862,6 +1866,10 @@ Begin
|
|||
|
||||
RecData[CurRecNum]^.Ident := Ident;
|
||||
RecData[CurRecNum]^.NumFields := 0;
|
||||
RecData[CurRecNum]^.DataSize := 0;
|
||||
RecData[CurRecNum]^.RecID := CurRecID;
|
||||
|
||||
Inc (CurRecID);
|
||||
|
||||
Repeat
|
||||
Inc (RecData[CurRecNum]^.NumFields);
|
||||
|
@ -1869,12 +1877,34 @@ Begin
|
|||
If RecData[CurRecNum]^.NumFields > mplMaxRecFields Then
|
||||
Error (mpsTooManyFields, '');
|
||||
|
||||
// need to check that datasize does not go over the max
|
||||
|
||||
ParseVariableInfo(False, True, Info); // if record fail if file type?
|
||||
ParseVariableInfo(False, True, Info);
|
||||
|
||||
RecData[CurRecNum]^.Fields[RecData[CurRecNum]^.NumFields] := Info;
|
||||
|
||||
Inc (RecData[CurRecNum]^.DataSize, Info.VarSize);
|
||||
Until (UpdateInfo.ErrorType <> 0) or GetStr(tkw[wBlockClose], False, tkwType = 1);
|
||||
|
||||
If RecData[CurRecNum]^.DataSize > mplMaxDataSize Then
|
||||
Error (mpsDataTooBig, '');
|
||||
(*
|
||||
OutString (Char(opTypeRec));
|
||||
OutWord (RecData[CurRecNum]^.RecID);
|
||||
OutWord (RecData[CurRecNum]^.NumFields);
|
||||
OutWord (RecData[CUrRecNum]^.DataSize);
|
||||
*)
|
||||
// what would we need:
|
||||
// 1. vartype (byte)
|
||||
// 2. offset (Word)
|
||||
// 3. size (word)
|
||||
|
||||
// output record define OP
|
||||
// output record ID
|
||||
// output record variable types STRING needs size and how do we do array?
|
||||
// output record size?
|
||||
|
||||
// ALSO need to output on createvariable for RECORD type
|
||||
// need to add both to interpreter engine
|
||||
// need to change interpreter to address vars by data pointer always?
|
||||
End;
|
||||
|
||||
Procedure TParserEngine.DefineProc;
|
||||
|
@ -1994,6 +2024,8 @@ Begin
|
|||
Else
|
||||
Error (mpsUnknownIdent, IdentStr);
|
||||
|
||||
// need to support records here
|
||||
|
||||
VarChar := VarType2Char(VarType);
|
||||
|
||||
VarData[ProcVar]^.vType := VarType;
|
||||
|
@ -2036,9 +2068,9 @@ Begin
|
|||
If (VarData[RV]^.vType <> Char2VarType(VarData[VN]^.Params[Count])) And (VarData[VN]^.Params[Count] <> '*') Then
|
||||
Error (mpsTypeMismatch, '');
|
||||
|
||||
// OutString (Char(opVariable)); // i dont think we need this
|
||||
OutWord (VarData[RV]^.VarID);
|
||||
ParseArray (RV);
|
||||
OutWord (VarData[RV]^.VarID);
|
||||
ParseArray (RV);
|
||||
ParseElement (RV, VarData[VN]^.Params[Count] <> '*', VarData[RV]^.vType);
|
||||
|
||||
// if = '*' and type iString then...do the string index
|
||||
End Else Begin
|
||||
|
@ -2074,13 +2106,15 @@ Begin
|
|||
|
||||
VC := FindVariable(IdentStr);
|
||||
|
||||
If Not (VarData[VC]^.vType in vNums) Then Error(mpsNumExpected, '');
|
||||
If Not (VarData[VC]^.vType in vNums) And (VarData[VC]^.vType <> iRecord) Then
|
||||
Error(mpsNumExpected, '');
|
||||
|
||||
If UpdateInfo.ErrorType <> 0 Then Exit;
|
||||
|
||||
OutWord (VarData[VC]^.VarID);
|
||||
ParseArray (VC);
|
||||
GetStr (tkw[wSetVar], True, False);
|
||||
OutWord (VarData[VC]^.VarID);
|
||||
ParseArray (VC);
|
||||
ParseElement (VC, True, iLongInt);
|
||||
GetStr (tkw[wSetVar], True, False);
|
||||
|
||||
If UpdateInfo.ErrorType <> 0 Then Exit;
|
||||
|
||||
|
@ -2432,8 +2466,8 @@ Begin
|
|||
If Not VarData[vn]^.InProc Then Exit;
|
||||
|
||||
If GetStr(tkw[wSetVar], False, False) Then Begin
|
||||
OutString (Char(opSetVar));
|
||||
OutWord (VarData[VN]^.VarID);
|
||||
OutString (Char(opSetVar));
|
||||
OutWord (VarData[VN]^.VarID);
|
||||
ParseVariable (VarData[VN]^.vType);
|
||||
|
||||
SetProcResult := True;
|
||||
|
@ -2443,6 +2477,7 @@ End;
|
|||
Procedure TParserEngine.ParseIdent;
|
||||
Var
|
||||
VarNum : LongInt;
|
||||
VT : TIdentTypes;
|
||||
Begin
|
||||
PrevChar;
|
||||
GetIdent(False);
|
||||
|
@ -2468,14 +2503,17 @@ Begin
|
|||
If VarData[VarNum]^.Proc Then Begin
|
||||
If Not SetProcResult(VarNum) Then ExecuteProcedure(VarNum, False);
|
||||
End Else Begin
|
||||
OutString (Char(opSetVar));
|
||||
OutWord (VarData[VarNum]^.VarID);
|
||||
ParseArray (VarNum);
|
||||
OutString (Char(opSetVar));
|
||||
OutWord (VarData[VarNum]^.VarID);
|
||||
ParseArray (VarNum);
|
||||
|
||||
VT := ParseElement (VarNum, False, iNone);
|
||||
|
||||
//will need to pull vartype from parse array here
|
||||
GetChar;
|
||||
|
||||
// should this only happen with a string?
|
||||
If Ch = tkw[wOpenArray] Then Begin
|
||||
// prob shoud be iString check here. also need to
|
||||
If (Ch = tkw[wOpenArray]) Then Begin
|
||||
OutString(Char(opStrArray));
|
||||
ParseVarNumber;
|
||||
// check here to make sure is <= string length?
|
||||
|
@ -2485,7 +2523,7 @@ Begin
|
|||
|
||||
If Not GetStr(tkw[wSetVar], True, False) Then Exit;
|
||||
|
||||
ParseVariable(VarData[VarNum]^.vType);
|
||||
ParseVariable(VT);
|
||||
End;
|
||||
End;
|
||||
End;
|
||||
|
@ -2623,10 +2661,12 @@ Begin
|
|||
|
||||
Dispose (GotoData[Count]);
|
||||
End;
|
||||
|
||||
CurGotoNum := SavedGoto;
|
||||
|
||||
For Count := CurRecNum DownTo SavedRec + 1 Do
|
||||
Dispose (RecData[Count]);
|
||||
|
||||
CurRecNum := SavedRec;
|
||||
|
||||
For Count := CurConstNum DownTo SavedConst + 1 Do
|
||||
|
@ -2651,10 +2691,6 @@ Begin
|
|||
|
||||
FillChar (InFile[CurFile], SizeOf(InFile[CurFile]), 0);
|
||||
|
||||
InFile[CurFile].LineCur := 1;
|
||||
InFile[CurFile].LineSaved := 1;
|
||||
InFile[CurFile].ColCur := 0;
|
||||
InFile[CurFile].ColSaved := 0;
|
||||
InFile[CurFile].Position := 1;
|
||||
InFile[CurFile].PosSaved := 1;
|
||||
InFile[CurFile].Size := 1;
|
||||
|
|
|
@ -48,8 +48,8 @@ Type
|
|||
{$ENDIF}
|
||||
|
||||
Function GetErrorMsg : String;
|
||||
Procedure Error (Err: Byte; Str: String);
|
||||
Procedure MoveToPos (Num: LongInt);
|
||||
Procedure Error (Err: Byte; Str: String);
|
||||
Procedure MoveToPos (Num: LongInt);
|
||||
Procedure SkipBlock;
|
||||
Function CurFilePos : LongInt;
|
||||
Procedure NextChar;
|
||||
|
@ -70,9 +70,9 @@ Type
|
|||
Procedure SetNumber (VN: Word; R: Real; Var A: TArrayInfo);
|
||||
Procedure SetVariable (VarNum: Word);
|
||||
|
||||
Function DefineVariable (DataStart: Pointer; RecSize: Word) : LongInt;
|
||||
Function DefineVariable : LongInt;
|
||||
Procedure DefineProcedure;
|
||||
Procedure DefineRecord;
|
||||
//Procedure DefineRecordType;
|
||||
|
||||
Procedure StatementRepeatUntil;
|
||||
Function StatementIfThenElse : Byte;
|
||||
|
@ -147,7 +147,7 @@ Begin
|
|||
// ProcPos : LongInt;
|
||||
// Data : PStack;
|
||||
// ArrPos : Byte;
|
||||
// ArrDim : TArrayInfo;
|
||||
// ArrDims : TArrayInfo;
|
||||
|
||||
End;
|
||||
{$ENDIF}
|
||||
|
@ -934,12 +934,13 @@ Begin
|
|||
End;
|
||||
End;
|
||||
|
||||
Function TInterpEngine.DefineVariable (DataStart: Pointer; RecSize: Word) : LongInt;
|
||||
Function TInterpEngine.DefineVariable : LongInt;
|
||||
Var
|
||||
VarType : TIdentTypes;
|
||||
NumVars : Word;
|
||||
SavedVar : Word;
|
||||
StrSize : Word;
|
||||
RecSize : Word;
|
||||
Count : Word;
|
||||
ArrayPos : Word;
|
||||
ArrayData : TArrayInfo;
|
||||
|
@ -962,6 +963,14 @@ Begin
|
|||
NextChar;
|
||||
End;
|
||||
|
||||
If Ch = Char(opTypeRec) Then Begin
|
||||
NextWord;
|
||||
|
||||
RecSize := W;
|
||||
|
||||
NextChar;
|
||||
End;
|
||||
|
||||
If Ch = Char(opArrDef) Then Begin
|
||||
NextWord;
|
||||
|
||||
|
@ -1011,15 +1020,10 @@ Begin
|
|||
|
||||
Result := DataSize;
|
||||
|
||||
If DataStart = NIL Then Begin
|
||||
GetMem (Data, DataSize);
|
||||
FillChar (Data^, DataSize, 0);
|
||||
GetMem (Data, DataSize);
|
||||
FillChar (Data^, DataSize, 0);
|
||||
|
||||
Kill := True;
|
||||
End Else Begin
|
||||
Data := DataStart;
|
||||
Kill := False;
|
||||
End;
|
||||
Kill := True;
|
||||
End;
|
||||
End;
|
||||
|
||||
|
@ -2024,37 +2028,10 @@ Begin
|
|||
PrevChar;
|
||||
End;
|
||||
|
||||
Procedure TInterpEngine.DefineRecord;
|
||||
Var
|
||||
Count : LongInt;
|
||||
RecSize : LongInt;
|
||||
Begin
|
||||
NextWord;
|
||||
|
||||
Inc (CurRecNum);
|
||||
New (RecData[CurRecNum]);
|
||||
|
||||
// Holds ID info for all variables in this record
|
||||
|
||||
RecData[CurRecNum]^.RecStart := CurVarNum + 2; {+1 is base}
|
||||
RecData[CurRecNum]^.NumFields := W;
|
||||
|
||||
NextWord;
|
||||
|
||||
RecSize := W;
|
||||
|
||||
NextChar; // opVarDeclare
|
||||
|
||||
DefineVariable (NIL, RecSize); // Base record identifier
|
||||
|
||||
RecSize := 1;
|
||||
|
||||
For Count := 1 to RecData[CurRecNum]^.NumFields Do Begin
|
||||
NextChar; // opVarDeclare
|
||||
|
||||
Inc (RecSize, DefineVariable(@TStack(VarData[RecData[CurRecNum]^.RecStart - 1]^.Data^)[RecSize], 0));
|
||||
End;
|
||||
End;
|
||||
//Procedure TInterpEngine.DefineRecordType;
|
||||
//Begin
|
||||
//asdf
|
||||
//End;
|
||||
|
||||
Function TInterpEngine.ExecuteBlock (StartVar, StartRec: Word) : Byte;
|
||||
Var
|
||||
|
@ -2085,7 +2062,7 @@ Begin
|
|||
Self.ExecuteBlock(CurVarNum, CurRecNum);
|
||||
End;
|
||||
{1} opBlockClose : Break;
|
||||
{2} opVarDeclare : DefineVariable (NIL, 0);
|
||||
{2} opVarDeclare : DefineVariable;
|
||||
{12} opSetVar : Begin
|
||||
NextWord;
|
||||
SetVariable(FindVariable(W));
|
||||
|
@ -2116,7 +2093,7 @@ Begin
|
|||
Break;
|
||||
End;
|
||||
End;
|
||||
{52} opTypeRec : DefineRecord;
|
||||
//{52} opTypeRec : DefineRecordType;
|
||||
{53} opBreak : Begin
|
||||
MoveToPos (BlockStart + BlockSize);
|
||||
Result := 1;
|
||||
|
|
|
@ -230,9 +230,20 @@ Const
|
|||
|
||||
Type
|
||||
{$IFNDEF MPLPARSER}
|
||||
PStack = ^TStack;
|
||||
TStack = Array[1..mplMaxDataSize] of Byte;
|
||||
TArrayInfo = Array[1..mplMaxArrayDem] of Word;
|
||||
PStack = ^TStack;
|
||||
TStack = Array[1..mplMaxDataSize] of Byte;
|
||||
TArrayInfo = Array[1..mplMaxArrayDem] of Word;
|
||||
TRecordInfo = Record
|
||||
vType : Byte;
|
||||
Offset : Word;
|
||||
DataSize : Word;
|
||||
End;
|
||||
//TVarInfo = Record
|
||||
// AInfo : Array[1..mplMaxArrayDem] of Word;
|
||||
// RInfo : Word;
|
||||
// End;
|
||||
// Basically, an ArrayInfo will have an appended Offset for DataPtr
|
||||
// if it is a record and probably some sort of record element ID
|
||||
|
||||
(*
|
||||
// MEMORY SAVING... could be 28 bytes per var?!?!
|
||||
|
@ -265,11 +276,17 @@ Type
|
|||
ArrDim : TArrayInfo;
|
||||
End;
|
||||
|
||||
TRecordElement = Record
|
||||
ESize : Word;
|
||||
Offset : Word;
|
||||
End;
|
||||
|
||||
PRecordRec = ^TRecordRec;
|
||||
TRecordRec = Record
|
||||
// RecID : Word; needed when Record variable type is added
|
||||
RecStart : Word;
|
||||
NumFields : Word;
|
||||
RecID : Word;
|
||||
Fields : Word;
|
||||
DataSize : Word;
|
||||
Element : Array[1..mplMaxRecFields] of TRecordElement;
|
||||
End;
|
||||
|
||||
VarDataRec = Array[1..mplMaxVars] of PVarRec;
|
||||
|
@ -285,6 +302,7 @@ Type
|
|||
InProc : Boolean;
|
||||
Proc : Boolean;
|
||||
ArrPos : Byte;
|
||||
RecID : Word;
|
||||
End;
|
||||
|
||||
PGotoRec = ^TGotoRec;
|
||||
|
|
Loading…
Reference in New Issue