Subversion Repositories pentevo

Rev

Rev 1047 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1047 Rev 1120
Line 1... Line 1...
1
 
1
 
2
; LAST UPDATE: 26.12.2022 savelij
2
; LAST UPDATE: 10.02.2024 savelij
3
 
3
 
4
; автоопределение кодировки работает неправильно
4
; автоопределение кодировки работает неправильно
5
 
5
 
6
                RELAXED ON
6
                RELAXED ON
7
                CPU Z80UNDOC
7
                CPU Z80UNDOC
Line 140... Line 140...
140
SIZEDATE        EQU STRLEN (DATE)
140
SIZEDATE        EQU STRLEN (DATE)
141
__POS := 0
141
__POS := 0
142
; извлечение месяца
142
; извлечение месяца
143
MMOUNTH := (CHARFROMSTR (DATE,__POS) - '0')
143
MMOUNTH := (CHARFROMSTR (DATE,__POS) - '0')
144
__POS := __POS + 1
144
__POS := __POS + 1
145
        IF MOMPASS > 1
-
 
146
        IF (CHARFROMSTR (DATE,__POS)) <> '/'
145
        IF (CHARFROMSTR (DATE,__POS)) > '/'
147
MMOUNTH := MMOUNTH * 10 + (CHARFROMSTR (DATE,__POS) - '0')
146
MMOUNTH := MMOUNTH * 10 + (CHARFROMSTR (DATE,__POS)) -'0'
148
__POS := __POS + 2
-
 
149
        ELSE
-
 
150
__POS := __POS + 1
147
__POS := __POS + 1
151
        ENDIF
148
        ENDIF
152
        ENDIF
149
__POS := __POS + 1
153
; извлечение даты
150
; извлечение даты
154
DDATE := (CHARFROMSTR (DATE,__POS) - '0')
151
DDATE := (CHARFROMSTR (DATE,__POS) - '0')
155
__POS := __POS + 1
152
__POS := __POS + 1
156
        IF MOMPASS > 1
-
 
157
        IF (CHARFROMSTR (DATE,__POS) <> '/')
153
        IF (CHARFROMSTR (DATE,__POS)) > '/'
158
DDATE := DDATE * 10 + (CHARFROMSTR (DATE,__POS) - '0')
154
DDATE := DDATE * 10 + (CHARFROMSTR (DATE,__POS)) - '0'
159
__POS := __POS + 2
-
 
160
        ELSE
-
 
161
__POS := __POS + 1
155
__POS := __POS + 1
162
        ENDIF
156
        ENDIF
163
        ENDIF
157
__POS := __POS + 1
164
; извлечение года
158
; извлечение года
165
YYEAR := (CHARFROMSTR (DATE,__POS) - '0')
159
YYEAR := (CHARFROMSTR (DATE,__POS) - '0')
166
__POS := __POS + 1
160
__POS := __POS + 1
167
        IF MOMPASS > 1
-
 
168
        WHILE __POS < SIZEDATE
-
 
169
        IF (CHARFROMSTR (DATE,__POS) <> '/')
161
        WHILE (CHARFROMSTR (DATE,__POS)) > '/'
170
YYEAR := YYEAR * 10 + (CHARFROMSTR (DATE,__POS) - '0')
162
YYEAR := YYEAR * 10 + (CHARFROMSTR (DATE,__POS)) - '0'
171
__POS := __POS + 1
163
__POS := __POS + 1
-
 
164
        IF __POS > SIZEDATE
-
 
165
        EXITM
172
        ENDIF
166
        ENDIF
173
        ENDM
167
        ENDM
174
        ENDIF
-
 
175
        IF YYEAR > 99
168
        IF YYEAR > 99
176
YYEAR := YYEAR - 2000
169
YYEAR := YYEAR - 2000
177
        ENDIF
170
        ENDIF
178
 
171
 
179
; генерация времени
172
; генерация времени
Line 181... Line 174...
181
SIZETIME        EQU STRLEN (TIME)
174
SIZETIME        EQU STRLEN (TIME)
182
__POS := 0
175
__POS := 0
183
; извлечение часа
176
; извлечение часа
184
HHOUR := CHARFROMSTR (TIME, __POS) - '0'
177
HHOUR := CHARFROMSTR (TIME, __POS) - '0'
185
__POS := __POS + 1
178
__POS := __POS + 1
186
        IF MOMPASS > 1
-
 
187
        IF (CHARFROMSTR (TIME, __POS) <> ':')
179
        IF (CHARFROMSTR (TIME,__POS)) <= '9'
188
HHOUR := HHOUR * 10 + CHARFROMSTR (TIME, __POS) - '0'
180
HHOUR := HHOUR * 10 + CHARFROMSTR (TIME, __POS) - '0'
189
__POS := __POS + 2
-
 
190
        ELSE
-
 
191
__POS := __POS + 1
181
__POS := __POS + 1
192
        ENDIF
182
        ENDIF
193
        ENDIF
183
__POS := __POS + 1
194
; извлечение минут
184
; извлечение минут
195
MMINUTE := CHARFROMSTR (TIME, __POS) - '0'
185
MMINUTE := CHARFROMSTR (TIME, __POS) - '0'
196
__POS := __POS + 1
186
__POS := __POS + 1
197
        IF MOMPASS > 1
-
 
198
        IF (CHARFROMSTR (TIME, __POS) <> ':')
187
        IF (CHARFROMSTR (TIME,__POS)) <= '9'
199
MMINUTE := MMINUTE * 10 + CHARFROMSTR (TIME, __POS) - '0'
188
MMINUTE := MMINUTE * 10 + CHARFROMSTR (TIME, __POS) - '0'
200
__POS := __POS + 2
-
 
201
        ELSE
-
 
202
__POS := __POS + 1
189
__POS := __POS + 1
203
        ENDIF
190
        ENDIF
204
        ENDIF
191
__POS := __POS + 1
205
; извлечение секунд
192
; извлечение секунд
206
SSECUND := CHARFROMSTR (TIME, __POS) - '0'
193
SSECUND := CHARFROMSTR (TIME, __POS) - '0'
207
__POS := __POS + 1
194
__POS := __POS + 1
208
        IF MOMPASS > 1
-
 
209
        IF __POS < SIZETIME
195
        IF __POS < SIZETIME
210
SSECUND := SSECUND * 10 + CHARFROMSTR (TIME, __POS) - '0'
196
SSECUND := SSECUND * 10 + CHARFROMSTR (TIME, __POS) - '0'
211
        ENDIF
197
        ENDIF
212
        ENDIF
-
 
213
 
198
 
214
DATA_VERS       EQU DDATE + (MMOUNTH << 5) + (YYEAR<<9) + 0x8000                        ;уже упаковано
199
DATA_VERS       EQU DDATE + (MMOUNTH << 5) + (YYEAR<<9) + 0x8000                        ;уже упаковано
215
 
200
 
216
FAT_DATE        EQU DDATE + (MMOUNTH << 5) + ((2000 + YYEAR - 1980) & 0x7F) << 9
201
FAT_DATE        EQU DDATE + (MMOUNTH << 5) + ((2000 + YYEAR - 1980) & 0x7F) << 9
217
FAT_TIME        EQU SSECUND / 2 + (MMINUTE << 5) + (HHOUR << 11)
202
FAT_TIME        EQU SSECUND / 2 + (MMINUTE << 5) + (HHOUR << 11)
Line 309... Line 294...
309
                ENDM
294
                ENDM
310
 
295
 
311
; выравнивание до сектора с учетом адреса компиляции
296
; выравнивание до сектора с учетом адреса компиляции
312
DALIGN          MACRO ADDRESS
297
DALIGN          MACRO ADDRESS
313
        IF LOW(ADDRESS)
298
        IF LOW (ADDRESS)
314
                DB LOW (-$)+LOW(ADDRESS) DUP(0)
299
                DB LOW (LOW (-$)+LOW(ADDRESS)) DUP(0)
315
        ELSE
300
        ELSE
316
                DB LOW (-$) DUP (0)
301
                DB LOW (-$) DUP (0)
317
        ENDIF
302
        ENDIF
318
                ENDM
303
                ENDM
319
 
304
 
Line 334... Line 319...
334
WINHDR          MACRO X,Y,V,H,CWIN,CCUR,FLAGS,NUMPKT,TEKPKT,NUMKOL, \
319
WINHDR          MACRO X,Y,V,H,CWIN,CCUR,FLAGS,NUMPKT,TEKPKT,NUMKOL, \
335
                        ADRTXT,ADRPRG,ADRMOUSE,ADRHOTKEY
320
                        ADRTXT,ADRPRG,ADRMOUSE,ADRHOTKEY
336
                DB X,Y,V,H,CWIN,CCUR,FLAGS,NUMPKT
321
                DB X,Y,V,H,CWIN,CCUR,FLAGS,NUMPKT
337
                DW TEKPKT,NUMKOL,ADRTXT,ADRPRG,ADRMOUSE,ADRHOTKEY
322
                DW TEKPKT,NUMKOL,ADRTXT,ADRPRG,ADRMOUSE,ADRHOTKEY
338
                ENDM
323
                ENDM
-
 
324
 
-
 
325
; генерация метки с резервированием места и размера области
-
 
326
_SETVAR         MACRO NAME, SIZE
-
 
327
NAME            EQU .CURRVAR            ; номер имени
-
 
328
        IFNB SIZE
-
 
329
.CURRVAR := .CURRVAR + SIZE
-
 
330
.NAME_Size      EQU SIZE                ; размер
-
 
331
        ELSE
-
 
332
.CURRVAR := .CURRVAR + BYTE
-
 
333
.NAME_Size      EQU BYTE
-
 
334
        ENDIF
-
 
335
.NAME_CurAdr    EQU $                   ; текущий адрес
-
 
336
                ENDM
-
 
337
 
-
 
338
; перенос метки назад на указанное число байт
-
 
339
_SUBVAR         MACRO SIZE
-
 
340
.CURRVAR := .CURRVAR - SIZE
-
 
341
                ENDM
-
 
342
 
-
 
343
; перенос метки вперед на указанное число байт
-
 
344
_ADDVAR         MACRO SIZE
-
 
345
.CURRVAR := .CURRVAR + SIZE
-
 
346
                ENDM
-
 
347
 
-
 
348
; инициализация переменной для резервирования указанным числом
-
 
349
; или 0 при отсуствии второго параметра
-
 
350
_INIT_VAR       MACRO START
-
 
351
        IFNB START
-
 
352
.CURRVAR := START
-
 
353
        ELSE
-
 
354
.CURRVAR := 0
-
 
355
        ENDIF
-
 
356
                ENDM
-
 
357
 
-
 
358
; выравнивание для генерации меток на границу 256 байт
-
 
359
_SETVAR_ALIGN   MACRO
-
 
360
.CURRVAR := .CURRVAR + 0x100 - (.CURRVAR & 0xFF)
-
 
361
                ENDM