midrange.com code scratchpad
Name:
New RPG version
Scriptlanguage:
Plain Text
Tabwidth:
4
Date:
01/25/2021 11:51:53 am
IP:
Logged
Description:
New RPG version for Report Automation
Code:
  1. F*  
  2. FBA@IMTP   IP   E                          DISK                              INFSR(*PSSR)
  3. F*
  4. F*  
  5. F*
  6. F**BAIMGCP       IF   E               K DISK                            INFSR(*PSSR)
  7. FBAIMGCL          IF    E               K  DISK                           INFSR(*PSSR)
  8. F*
  9. F*    
  10. F*
  11. F**IRDLIFP    IF  E     K  DISK   INFSR(*PSSR)
  12. FIRDLIFL   IF  E            K DISK   INFSR(*PSSR)
  13. F*
  14. F*   
  15. F*
  16. F**SSGMCPP   IF  E    K DISK   INFSR(*PSSR)
  17. FSSGMCPL  IF  E        K DISK  INFSR(*PSSR)
  18. F*
  19.  
  20. F**SSCYIFP   IF E  K DISK    INFSR(*PSSR)
  21. FSSCYIFL    IF   E   K DISK   INFSR(*PSSR)
  22. F                                                USROPN
  23. F*   
  24. F*
  25. FCM@LERP   IF   E                  K   DISK  INFSR (*PSSR)
  26. F                                                                  PREFIX(N@:2)
  27. F*
  28. F* 
  29. F*
  30. F*INBA71R1      O    E                         PRINTER   USROPN
  31. F*                                                                              INFDS(W1SF01)
  32. FINBA71P              UF    A    E           DISK            USROPN
  33.  
  34.  
  35. D*
  36. D* 
  37. D  BA@LPMP   E  DS
  38. D*
  39. D*
  40. D CYC                S                               9     DIM(500)
  41. D  DPF                S                               1      DIM(500)
  42. D*
  43. D* 
  44. D                         DS
  45. DWSCYCD                              1            9
  46. DWBCTCD                               1           2
  47. DWBGMAB                              3           6
  48. D WBCYCD                              7           9
  49. D*
  50. D*Data Structure for Header information
  51. D WSP601              E    DS
  52. D*
  53. D WSMSTS            DS
  54. D W1MSTS            1               2
  55. D  W1FILR             3               3
  56. D*
  57. D* Data structure for header information
  58. D WSHDR1                     DS
  59. D  W1HDR1                                 1              40
  60. D   W1HDR2                               41             80                  INZ('REPORT')
  61.  
  62. D W1HDR3                                 81             90
  63. D W1DATE                                 91             98
  64. D W1HDR4                               101           105
  65. D  W1TIME                               106           115
  66. D  W2TIME                 DS
  67. D  W0HH                                       1             2
  68. D   W0MM                                    3             4
  69. D  W0SS                                        5             6
  70. D*
  71. DWSHDR2                    DS
  72. D W2HDR1                                   1              20                 INZ('Ref No')
  73. D W2HDR2                                  21            40                  INZ('UT No.')
  74. DW2HDR3                                   41             48                INZ('MSG Type')
  75. D W2HDR4                                  49             58                INZ('Tr Type')
  76. D W2HDR5                                  59             61                INZ('Ccy')
  77. D W2HDR6                                  62             70                INZ('Amt')
  78. D  W2HDR7                                 71              84               INZ('AC')
  79. D W2HDR8                                  85            100              INZ('Drdt')
  80. D W2HDR9                                 101           110              INZ('Value Date')
  81. D W2HDR10                               111            130              INZ('Approval Workstation')
  82. D*
  83. D* Detail Line data structure
  84. D WSDTL1                                 DS
  85. D WSREFNO                                  1                   16
  86. D WSTRNO                                   17                   38
  87. D  WSMSTYP                                39                    41
  88. D  WSTRTYP                                 42                    44
  89. D   WSSFMS                                  45                   50
  90. DWSCCY                                      51                    53
  91. D WSAMT                                     54                    66           2
  92. D WSACT                                     67                    80
  93. D  WSBK                                      81                    84
  94. D WSBR                                        85                    88
  95. D WSVD                                       89                    97
  96. D WSAWS                                    98                    107
  97. D WSRMKS                                 108                  132
  98. D*
  99. D* DS for End of Report Footer 1
  100. D*
  101. D WSFTR1                           DS
  102. D WSFIL1                                         1                 10
  103. D  WSTXT1                                     11                 35
  104. D  WSFIL2                                       36                37
  105. D  WSMSG                                       38                42
  106. D*
  107. D* DS for End of Report Footer 2
  108. D WSFTR2                          DS
  109. D*
  110. D WSFIL3                                        1                10
  111. D WSTXT2                                      11                31
  112. D WSFIL4                                        32              38
  113. D  WSTRAM                                    39              59
  114. D*
  115. D WSXR04                  E       DS                     INZ
  116. D WSXR02                 E         DS                    INZ
  117. D*
  118. D MSGS                       S                   40                 DIM(3)       CTDATA                  PERRCD(1)
  119. D*
  120. D*    
  121. D*
  122. D                                           DS
  123. D W9ACNO                                         1                     14
  124. D  W9ACB                                            1                        3
  125. D   W9HPN1                                         4                       4
  126. D   W9ACS                                           5                      10
  127. D  W9HPN2                                         11                      11
  128. D W9ACX                                             12                    14
  129. D*
  130. D* <CR> <LF>
  131. D*
  132. D W0CRLF                        DS
  133. D W0CR                                                      1                                                                     Carriage Return
  134. D  W0LF                                                      1                                                                          Line Feed
  135. D*
  136. D MsgPtr                               S                      5P      0                                                             Msg Pointer
  137. D  TagEnd                              S                      5P      0                                                             Pos of end of tag
  138. D MsgEnd                             S                       5P      0                                                             Pos of end of msg
  139.  
  140. D/COPY   SRC1,XR02D
  141. D/COPY   SRC1,XRZZ2D
  142. D*
  143. C*****************************************************
  144. C* Main Line logic
  145. C*****************************************************
  146. C   *INZSR                    BEGSR
  147. C                                     EXSR                 SR999
  148. C                                     OPEN                 INB71P
  149. C* Write header Details
  150. C*
  151. C                                    EXSR              SR001
  152. C* WRITE Transactions details
  153. C                                     EXSR             SR002
  154. C*Write  End of Report details
  155. C                                     EXSR             SR003
  156. C*
  157. C                                      CLOSE         INBA71P                                                     Close the download report file
  158. C                                      RETURN
  159. C                                      ENDSR
  160. C*
  161. C*****************************************************
  162. C*    Write the Header Details in the file 
  163. C*****************************************************
  164. C     SR001                    BEGSR
  165. C                                    TIME                        W0TIME
  166. C                                     EVAL              W2TIME  = %CHAR(W0TIME)
  167. C                                     EVAL               W1TIME = W0HH + ':'  + W0MM + ':'  + W0SS
  168. C                                     MOVE         P@XMDT            W1DATE                            Date  in the Header
  169. C                                     MOVEL(P)   WSHDR1              IF@TXT
  170. C                                     EVAL    IF@TXT   = %TRIM(IF@TXT)  +  W0CRLF
  171. C                                     WRITE    INBA71PR
  172. C                                    MOVEL(P)           WSHDR2          IF@TXT
  173. C                                    EVAL             IF@TXT  = %TRIM (IF@TXT)  +W0CRLF
  174. C                                      WRITE             INBA71PR
  175. C   SR001E                     ENDSR
  176. C/EJECT
  177. C********************************************************
  178. C* Write the Details of all the transactions     
  179. C********************************************************
  180. C*
  181. C   SR002                         BEGSR
  182. C                                       CLEAR                           WSDTL1
  183. C                                       DOW        NOT  %EOF (BA@IMTP)
  184. C                                       READ                 BA@IMTR
  185. C                                       MOVEL(P)         L@MSG                   BA@LPMP
  186. C                                       MOVEL(P)         N4MURF                 WSTRNO                                                            
  187. C                                       MOVEL(P)          N4SFMT                 WSSFMS                                                              
  188. C                                       MOVEL(P)          L@UTRN                 WSTRNO                                                              
  189. C L@MGID                      CHAIN               BAIMGCR                               81
  190. C *IN81                            IFEQ                   W0OFF
  191. C                                        MOVEL(P)       BHTMTP                          WSTRTYP                                     
  192. C                                        MOVEL(P)      BHTGMT                          WSMSTYP                                     
  193. C                                        MOVEL(P)     BHRCCY                           WSCCY                                          
  194. C                                        MOVEL(P)      BHFRBK                           WSBK                                            
  195. C                                        MOVEL(P)    BHFRBR                             WSBR                                             
  196. C                                        MOVEL(P)      BHAVWS                          WSAWS                                         
  197. C                                        MOVEL(P)     BHMSTS                             WSMSTS                                      
  198. C*              
  199. C       N4MURF                    IFEQ      *ALL  'X'
  200. C                                            MOVEL(P)    BHTRNO               WSTRNO
  201. C                                           ENDIF
  202. C*
  203. C*Find decimal print  
  204. C                                         MOVEL    BHCTCD                     WBCTCD
  205. C                                         MOVEL    BHGMAB                     WBGMAB
  206. C                                         MOVEL    BHRCCY                      WBCYCD
  207. C                                          Z-ADD   W0PT1                            J
  208. C           WSCYCD              LOOKUP     CYC(J)                                                                95
  209. C          *IN95                      IFEQ              W0ON
  210. C                                           MOVE        DPF(J)     W1DPF
  211. C                                           END
  212. C                                          MOVE    W1DPF                 @04DEC
  213. C*
  214. C* Edit  Remittance  Amount
  215. C                                          Z-ADD     3                          @04NOC                        No of commas
  216. C                                          MOVEL          '4'                   @04TYP                         Print both +  &  -
  217. C                                          Z-ADD       BHRAMT           @04MUT                       Remittance  Amount
  218. C                                          CALLB         'XR04'              P0XR04
  219. C                 @04RET         IFNE                W0OK
  220. C                                        MOVEL        *ALL  '*'   WSAMT
  221. C                                        ELSE
  222. C                                         MOVE          @04AMT                         WSAMT
  223. C                                        ENDIF
  224. C*
  225. C                                       EVAL            W0RMT =  W0RAMT  +  BHRAMT
  226. C                                       EVAL            W0TTMG  =  W0TTMG  +1
  227.  
  228. C*
  229. C* Edit Date received
  230. C                                       MOVE      P@XMDT                    @02IDT                           Value Date
  231. C                                       Z-ADD      9                                    @02LEN                          DDMMMYYYY
  232. C*
  233. C                                         CALLB       'XR02'           P0XR02
  234. C    @02RTC                      IFEQ             W0OK
  235. C                                         MOVEL          @02FDT             WSVD
  236. C                                          ELSE
  237. C                                         MOVEL           *BLANKS            WSVD
  238. C                                         ENDIF
  239. C*
  240. C* Find out Payment A/c
  241. C*       L@UTRN               CHAIN        IRDLIFR                              81
  242. C          L@MGID              CHAIN        IRDLIFR                               81
  243. C      *IN81                          IFEQ           W0OFF
  244. C                                           IF   (IAPYAB <> *HIVAL  AND
  245. C                                                   IAPYAB <> *LOVAL
  246. C                                        MOVE          IAPYAB                W9ACB
  247. C                                         MOVE         '-'                           W9HPN1
  248. C                                        MOVE          IAPYAS                 W9ACS
  249. C                                        MOVE         '-'                             W9HPN2
  250. C                                        MOVE        IAPYAX                   W9ACX
  251. C*
  252. C                                        MOVEL       W9ACNO              D1ACNO
  253. C                                         ENDIF
  254. C                                         ENDIF
  255. C*
  256. C                                         ENDIF
  257. C*
  258. C                                        IF  (N4SFMT = W0PIRP  OR
  259. C                                              N4SFMT = W0IFRP   OR
  260. C                                              N4SFMT = W0DRNT  OR
  261. C                                              N4SFMT = W0CRNT)
  262. C                                       MOVEL  W0IFN                WSTRTYP                                           Trans. type
  263. C*
  264. C* Bypass Printing of PI/IFTP Notification  
  265. C*    -Can be activated   if required
  266.  
  267. C                                             ENDIF
  268. C*
  269. C                                             IF                     (L@ACKG   <>  *BLANKS  AND
  270. C                                                                      (N4SFMT  = W0PIRP  OR
  271. C                                                                      N4SFMT  = W0IFRP))
  272. C*                                        --Extract TRN  # from SFMS TAG 2020 (Tag 20)
  273. C                                             EVAL  MsgPtr  = %SCAN(W0T2020:N4MQMG:1)                              Tag  20  ?
  274. C                                             If   MsgPtr > 0                                                                                          Tag found
  275. C                                            Eval   TagEnd = %SCAN(W0CRLF:N4MQMG:(MsgPtr+6))                  where tag end ?
  276. C                                           If   TagEnd  >  0                                                                                          Tag Found
  277. C                                           Eval   D1TRNO  =  %SUBST(N4MQMG:MsgPtr+6:
  278. C                                                                               (TagEnd-MsgPtr-6)
  279. C                                           ENDIF
  280. C                                           ENDIF
  281. C                                           ENDIF
  282. C*
  283.  
  284. C*  PI/IFTP  Response  including  DR/CR Notification Messages
  285. C                                     MOVE    *BLANKS   WSRMKS
  286. C*
  287. C*Check for NAK   Messages and print the reason
  288. C*
  289. C   L@ACKG                          IFNE            *BLANKS
  290. C*
  291. C         L@NKCD                 CHAIN          CM@LERR                                                           81
  292. C         *IN81                        IFEQ              W0OFF  
  293. C*                                          MOVEL     N@ERN1                         WSRMKS
  294. C                                            EVAL    WSRMKS  = L@NKCD  + W0DASH  +N@ERN1
  295. C                                            ENDIF
  296. C                                            ELSE
  297. C                                           IF                 N4SFMT = W0DRNT
  298. C                                           MOVEL(P)  MSG(2)                         WSRMKS
  299. C                                            ELSE
  300. C                                             IF           N4SFMT  = W0CRNT
  301. C                                           MOVEL(P)  MSGS(3)               D2RMKS
  302. C                                           ELSE
  303. C                                            IF                   (N4SFMT  = W0PIRP  OR
  304. C                                                                     N4SFMT   =  W0IFRP)
  305. C                                             IF              %SST(L@UTRN:5:1) = W0P
  306. C                                           MOVEL(P)    MSGS(1)              WSRMKS
  307. C                                             ENDIF
  308. C                                             ENDIF
  309. C                                              ENDIF
  310. C                                               ENDIF
  311. C                                               ENDIF
  312. C*
  313. C                                             MOVEL (P)     WSDTL1                           IF@TXT
  314. C                                              EVAL                IF@TXT   = %TRIM(IF@TXT)  + W0CRLF
  315. C                                             WRITE            INBA71PR
  316.  
  317. C                                               ENDDO
  318.  
  319. C   SR002E                              ENDSR
  320. C/EJECT
  321. C*
  322. C    SR003                              BEGSR
  323. C                                              MOVE                          W1DPF                   @04DEC
  324. C*
  325. C* Edit Total  Remittance  Amount
  326. C                                               Z-ADD           3                        @04NOC                           No of commas
  327. C                                               MOVEL          '4'                      @04TYP                             Print both +  &  -
  328. C                                                Z-ADD          W0RAMT          @04MUT                             Remittance Amount
  329. C                                                CALLB         'XR04'                P0XR04
  330. C              @04RET                    IFNE               W0OK
  331. C                                                 MOVEL         *ALL '*'            WSTRAM                              Amount
  332. C                                                 ELSE
  333. C                                                 MOVE           @04AMT           WSTRAM                             Amount
  334. C                                                 ENDIF
  335. C*
  336. C*Edit Total Messages
  337. C                                                         MOVE            *ZERO                 @04DEC
  338. C                                                         Z-ADD            W0TTMG             @04MUT
  339. C                                                         Z-ADD            2                            @04NOC
  340. C                                                         MOVEL           *ZERO                 @04TYP
  341. C                                                         MOVE            *BLANK               @04PCH
  342. C                                                         CALLB           'XR04'                    P0XR04
  343. C    @04RET                                      IFEQ                W0OK
  344. C                                                         MOVE            @04AMT                WSTMSG
  345. C                                                          ELSE
  346. C                                                          MOVE            W0TTMG               WSTMSG
  347. C                                                          END
  348. C                                                         MOVEL(P)       WSFTR1              IF@TXT
  349. C                                                          EVAL             IF@TXT    = %TRIM (IF2TXT)  + W0CRLF
  350. C                                                           WRITE           INBA71PR
  351. C                                                          MOVEL(P)         WSFTR2            IF@TXT
  352. C                                                          EVAL                 IF@TXT    = %TRIM(IF@TXT)   W0CRLF
  353. C                                                         WRITE           INBA71PR
  354. C     SR003E                                  ENDSR
  355. C/EJECT
  356. C*******************************************************************************
  357. C* Initialization
  358. C*******************************************************************************
  359. C C     SR999                              BEGSR
  360. C*
  361. C       *LIKE                            DEFINE                UVRPID                        W0RPID
  362. C       *LIKE                            DEFINE                 W1SPNO                      W0SPNO
  363. C       *LIKE                            DEFINE                  H1PGCT                       W0PGCT
  364. C       *LIKE                             DEFINE                L@CTCD                      K0CTCD
  365. C       *LIKE                             DEFINE                L@GMAB                       K0GMAB
  366. C       *LIKE                             DEFINE                XRCDPF                       W1DPF                                                 Dec  Prt
  367. C       *LIKE                             DEFINE                N4SFMT                         W0PIRP                                               PI Response
  368. C       *LIKE                             DEFINE                N4SFMT                         W0IFRP                                               IFTP  Response
  369. C       *LIKE                             DEFINE                 N4SFMT                        W0DRNT                                            IFTP  Response
  370. C       *LIKE                              DEFINE               N4SFMT                         W0CRNT                                            IFTP   Response
  371. C*
  372. C      P0XR04                              PLIST
  373. C                                                  PARM                                     WSXR04
  374.  
  375. C   P0XR02                                PLIST
  376. C                                                 PARM                                     WSXR02
  377. C                                                 PARM                                       @02M
  378. C*
  379. C  P0601                                    PLIST                                                                                                                   For SP601
  380. C                                                PARM                                      WSP601         
  381. C* Entry Level Parameters
  382. C   *ENTRY                              PLIST
  383. C                                                PARM                                    L@CTCD                                        2
  384. C                                               PARM                                     L@GMAB                                        4
  385. C                                               PARM                                    P@BRNO                                         3
  386. C                                                PARM                                   P@XMDT                                         8
  387. C* Define Key list parameters
  388. C    K0GMCP                             KLIST      
  389. C                                                 KFLD                                      K0CTCD                                               
  390. C                                                  KFLD                                     K0GMAB
  391. C* Define Constant   Variables
  392. C*
  393. C                                                MOVEL           W0ON                     W0ON                        1
  394. C                                                MOVEL            W0OFF                   W0OFF                       1
  395. C                                                MOVEL           '1'                               W0ON
  396. C                                                MOVEL           '0'                                W0OFF
  397. C                                               MOVEL            'Y'                              W0YES
  398. C                                                MOVEL          'N'                                W0NO                      1
  399. C                                                MOVEL           '0'                               W0OK                       1
  400. C                                               MOVEL            'S'                               W0S                           2                   Sending
  401. C                                               MOVEL            'T'                               W0T                            2                   Sending
  402. C                                               MOVEL            'E'                                W0E                           2                    Error
  403. C                                               MOVEL            'C'                               W0C                           2                   Cancelled
  404. C                                                MOVEL           'P'                                W0P                            2                   Cancelled
  405. C                                               MOVEL           'PR'                              W0PR                         2                     Pending Repair
  406. C                                                MOVEL          'PA'                              W0PA                           2                  Pending Approval
  407. C                                               MOVE            ':2020:'                         W0T2020                      6                 
  408. C                                               MOVE          '298R90'                        W0PIRP                                             PI Response Msg Type
  409. C                                               MOVE          '298R09'                        W0IFRP                                             IFTP Response Msg Type
  410. C                                               MOVE          '298R43'                         W0DRNT                                          Debit  Notification
  411. C                                                MOVE         '298R44'                        W0CRNT                                           Credit Notification
  412. C                                               MOVE          'ACK'                             W0ACK                         3
  413. C                                                MOVE         'NAK'                            W0NAK                          3
  414. C                                                MOVE         'IFN'                              W0IFN                            3
  415. C                                                MOVEL        '-'                                    W0DASH                      1
  416. C                                                 BITOFF         '01234567'                   W0CR
  417. C                                                 BITOFF         '01234567'                   W0LF
  418. C                                                 BITON          '457'                              W0CR                                                        Carriage    Return
  419. C                                                 BITON          '257'                               W0LF                                                         Line  Feed
  420. C                                                 Z-ADD           60                                  W0PGLM             3    0                           Page Limit
  421. C                                                 Z-ADD           2                                    W0DRSZ              3    0                           Detail  Rec  Size  1
  422. C                                                 Z-ADD           3                                    W0EDSZ               3    0                          Ending  Rec  Size
  423. C                                                 MOVE                   *BLANKS             W0SIN                  1            Service Identifier.  H-> Host,P-> PI
  424. C*      
  425. C*
  426. C* Define Non-Constant  Variables
  427. C*
  428. C                                                  Z-ADD                   *ZERO                      W0PT1             5   0
  429. C                                                  Z-ADD                   *ZERO                      W0TIME           6   0                              Report Time
  430. C                                                  Z-ADD                    *ZERO                     W0TEMP          6   0                           Temp Linee Counter
  431. C                                                   Z-ADD                  *ZERO                       W0RAMT        16  0                           Total remittance Amount
  432. C                                                 Z-ADD                     *ZERO                      W0TTMG           5  0                           Total Message Count
  433. C                                                  Z-ADD                     *ZERO                       I                        3   0                            Counter
  434. C                                                  Z-ADD                   *ZERO                         J                        5   0                             Table Index
  435. C                                                   Z-ADD                   *ZERO                        K                       5   0                              Index variable
  436. C*                                                 Z-ADD                 *ZEROS                        W1LCNT   
  437. C                                                   MOVEL                W0OFF                        W1PRHC            1
  438. C                                                   MOVEL                 W0OFF                        W1PRHD            1
  439. C                                                    MOVELL               W0OFF                       W1PRHT             1
  440. C                                                   MOVEL                  W0OFF                        W0OPEN            1                                Report   open
  441. C                                                   MOVEL                   W0OFF                       W1NXPG             1                               Next   page
  442. C*
  443. C*  Define  Date Conversion  fields
  444. C                                                    Z-ADD               7                   @02LEN                                    Date Length
  445. C                                                    MOVEL             'DMY'            @02DTF                                    Date  Format
  446. C*
  447. C* Set on Initialization Indicator
  448. C*                                                     MOVE      W0ON                 *IN91
  449. C*
  450. C* 
  451. C* Initialize Report ID
  452. C                                                     MOVEL   'INBA71R1'           W0RPID                       Report  ID  - Full
  453. C* Load Currency Information
  454. C                                                          Z-ADD              500      J
  455. C*
  456. C**                                                       OPEN                SSCYIFP                                   81
  457. C                                                            OPEN               SSCYIFL                                    81
  458. C                                                            READ               SSCYIFR                                         81
  459. C*
  460. C          *IN81                                      DOWNE            W0ON
  461. C            J                                             ANDGT             *ZERO
  462. C                                                          MOVEL           XRCTCD                      WBCTCD
  463. C                                                          MOVEL           XRGMAB                       WBGMAB
  464. C                                                          MOVEL             XRCYCD                      WBCYCD
  465. C                                                          MOVE               XRCDPF                        DPF(J)
  466. C                                                          SUB                    1                                        J
  467. C*
  468. C                                                          READ                SSCYIFR                                           81
  469. C                                                          END
  470. C*
  471. C            J                                               ADD                 1                         W0PT1
  472. C            W0PT1                                    IFGT                 500
  473. C                                                            SUB                  1                         W0PT1
  474. C                                                            MOVE               *LOVAL            CYC(J)
  475. C                                                            MOVE                *LOVAL            DPF(J)
  476. C                                                            END
  477. C*
  478. C**                                                       CLOSE   SSCYIFP
  479. C                                                           CLOSE   SSCYIFL                                                     81
  480. C*
  481. C       SR999E                                         ENDSR
  482. C*
  483. C/EJECT
  484. C/COPY  SRC1,XRZZ2C
  485. ** MESSAGE Fields -MSGS
  486. PI  constructed message                                                                1
  487. Debit  Notification                                                                         2
  488. Credit  Notification                                                                        3
  489.  
  490.  
  491.      
  492.     
  493.   
  494.  
  495.  
© 2004-2019 by midrange.com generated in 0.011s valid xhtml & css