home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / usenet / altsrcs / 1 / 1819 < prev    next >
Encoding:
Internet Message Format  |  1990-12-28  |  10.9 KB

  1. From: cadp17@vaxa.strath.ac.uk (G.M.T.)
  2. Newsgroups: alt.sources,vmsnet.sources.games
  3. Subject: How to convert shapes to 100% pascal
  4. Message-ID: <275.26ed45fa@vaxa.strath.ac.uk>
  5. Date: 11 Sep 90 20:15:54 GMT
  6.  
  7.  
  8.     Hmmm.... pascal, fortran and C???
  9.  
  10.     Here's a proggy to convert shapes.pas into pure 100% Pascal..
  11.  
  12.     Mail me if you have any probs....
  13.  
  14.     Instructions are in the .TXT file this produces..
  15.  
  16. -- 
  17. +------------------------------------------------------------------------------+
  18. | Gordon M. Tervit.            JANET: CADP17@UK.AC.STRATH.VAXB                 |
  19. |                             BITNET: CADP17%VAXB.STRATH.AC.UK@UKACRL          |
  20. |                           INTERNET: CADP17%VAXB.STRATH.AC.UK@EDU.CUNY.CUNYVM |
  21. +------------------------------------------------------------------------------+
  22.  
  23. $! ------------------ CUT HERE -----------------------
  24. $ v='f$verify(f$trnlnm("SHARE_VERIFY"))'
  25. $!
  26. $! This archive created by VMS_SHARE Version 7.1-004  3-AUG-1989
  27. $!   On 11-SEP-1990 19:56:05.67   By user CADP17 
  28. $!
  29. $! This VMS_SHARE Written by:
  30. $!    Andy Harper, Kings College London UK
  31. $!
  32. $! Acknowledgements to:
  33. $!    James Gray       - Original VMS_SHARE
  34. $!    Michael Bednarek - Original Concept and implementation
  35. $!
  36. $! TO UNPACK THIS SHARE FILE, CONCATENATE ALL PARTS IN ORDER
  37. $! AND EXECUTE AS A COMMAND PROCEDURE  (  @name  )
  38. $!
  39. $! THE FOLLOWING FILE(S) WILL BE CREATED AFTER UNPACKING:
  40. $!       1. SORT_SHAPES.COM;2
  41. $!       2. SORT_SHAPES.EDT;2
  42. $!       3. SORT_SHAPES.PAS;1
  43. $!       4. SORT_SHAPES.TXT;2
  44. $!
  45. $set="set"
  46. $set symbol/scope=(nolocal,noglobal)
  47. $f=f$parse("SHARE_TEMP","SYS$SCRATCH:.TMP_"+f$getjpi("","PID"))
  48. $e="write sys$error  ""%UNPACK"", "
  49. $w="write sys$output ""%UNPACK"", "
  50. $ if f$trnlnm("SHARE_LOG") then $ w = "!"
  51. $ if f$getsyi("version") .ges. "V4.4" then $ goto START
  52. $ e "-E-OLDVER, Must run at least VMS 4.4"
  53. $ v=f$verify(v)
  54. $ exit 44
  55. $UNPACK: SUBROUTINE ! P1=filename, P2=checksum
  56. $ if f$search(P1) .eqs. "" then $ goto file_absent
  57. $ e "-W-EXISTS, File ''P1' exists. Skipped."
  58. $ delete/nolog 'f'*
  59. $ exit
  60. $file_absent:
  61. $ if f$parse(P1) .nes. "" then $ goto dirok
  62. $ dn=f$parse(P1,,,"DIRECTORY")
  63. $ w "-I-CREDIR, Creating directory ''dn'."
  64. $ create/dir 'dn'
  65. $ if $status then $ goto dirok
  66. $ e "-E-CREDIRFAIL, Unable to create ''dn'. File skipped."
  67. $ delete/nolog 'f'*
  68. $ exit
  69. $dirok:
  70. $ w "-I-PROCESS, Processing file ''P1'."
  71. $ define/user sys$output nl:
  72. $ EDIT/TPU/NOSEC/NODIS/COM=SYS$INPUT 'f'/OUT='P1'
  73. PROCEDURE Unpacker ON_ERROR ENDON_ERROR;SET(FACILITY_NAME,"UNPACK");SET(
  74. SUCCESS,OFF);SET(INFORMATIONAL,OFF);f:=GET_INFO(COMMAND_LINE,"file_name");
  75. buff:=CREATE_BUFFER(f,f);p:=SPAN(" ")@r&LINE_END;POSITION(BEGINNING_OF(buff))
  76. ;LOOP EXITIF SEARCH(p,FORWARD)=0;POSITION(r);ERASE(r);ENDLOOP;POSITION(
  77. BEGINNING_OF(buff));g:=0;LOOP EXITIF MARK(NONE)=END_OF(buff);x:=
  78. ERASE_CHARACTER(1);IF g = 0 THEN IF x="X" THEN MOVE_VERTICAL(1);ENDIF;IF x=
  79. "V" THEN APPEND_LINE;MOVE_HORIZONTAL(-CURRENT_OFFSET);MOVE_VERTICAL(1);ENDIF;
  80. IF x="+" THEN g:=1;ERASE_LINE;ENDIF;ELSE IF x="-" THEN g:=0;ENDIF;ERASE_LINE;
  81. ENDIF;ENDLOOP;p:="`";POSITION(BEGINNING_OF(buff));LOOP r:=SEARCH(p,FORWARD);
  82. EXITIF r=0;POSITION(r);ERASE(r);COPY_TEXT(ASCII(INT(ERASE_CHARACTER(3))));
  83. ENDLOOP;o:=GET_INFO(COMMAND_LINE,"output_file");WRITE_FILE(buff,o);
  84. ENDPROCEDURE;Unpacker;EXIT;
  85. $ delete/nolog 'f'*
  86. $ CHECKSUM 'P1'
  87. $ IF CHECKSUM$CHECKSUM .eqs. P2 THEN $ EXIT
  88. $ e "-E-CHKSMFAIL, Checksum of ''P1' failed."
  89. $ ENDSUBROUTINE
  90. $START:
  91. $ create/nolog 'f'
  92. X$! (C) 1990 CADP17@STRATH.VAXB
  93. X$!
  94. X$! This converts CADP02's SHAPES.PAS to pure 100% PASCAL (Wow!) 8-)
  95. X$!
  96. X$ write sys$output "Converting...."
  97. X$ EDIT/EDT /COMMANDS=SORT_SHAPES.EDT SHAPES.PAS
  98. X$ type sys$input
  99. XSHAPES.PAS has been converted to pure PASCAL
  100. X
  101. XYou can now delete INCLUDES.C, RAND.FOR and SORT_SHAPES.*
  102. X
  103. XThe COMPILE.COM is also defunct....
  104. X
  105. XSimply PASCAL SHAPES, then LINK SHAPES
  106. $ CALL UNPACK SORT_SHAPES.COM;2 1364791213
  107. $ create/nolog 'f'
  108. Xdelete 106 thru 120
  109. X107
  110. Xinclude sort_shapes.pas
  111. Xexit
  112. $ CALL UNPACK SORT_SHAPES.EDT;2 52383506
  113. $ create/nolog 'f'
  114. X`123* Here's a tricky situation for you..... 8-)`009`009`009`009*`125
  115. X`123*`009`009`009`009`009`009`009`009`009*`125
  116. X`123* The algorithms for the following routines are (C) Copyright to`009*`12
  117. V5
  118. X`123* CHBS08 and CADP02@STRATH.VAXB, but the pascal code is (C) Copyright  *
  119. V`125
  120. X`123* 1990 CADP17@STRATH.VAXB "Noddysoft"`009`009`009`009`009*`125
  121. X`123*`009`009`009`009`009`009`009`009`009*`125
  122. X`123* This code may be used, abused and distributed as you like, on the`009*
  123. V`125
  124. X`123* condition that this message appears in any distribution/version`009*`1
  125. V25
  126. X`123* and you have the permission to distribute the original routines`009*`1
  127. V25
  128. X`123* from CADP02.`009`009`009`009`009`009`009`009*`125
  129. X`123*`009`009`009`009`009`009`009`009`009*`125
  130. X`123* These routines replace the includes.c and rand.for files in the 1990`0
  131. V09*`125
  132. X`123* distribution of CADP02's SHAPES.... This makes the program 100%`009*`1
  133. V25
  134. X`123* PASCAL.... 8-)`009(Wow!)`009`009`009`009`009`009*`125
  135. X`123*`009`009`009`009`009`009`009`009`009*`125
  136. X`123* And before I forget... a quick mention goes to GAVIN (CBAP09)`009*`125
  137. X`123* simply for being a reasonably great guy.`009`009`009`009*`125
  138. X
  139. X`123*** THESE ROUTINES REPLACE INCLUDES.C ***`125
  140. XTYPE
  141. X`009USRSTR =  packed array `0911..5`093 of char;
  142. X`009VARSTR`009= VARYING`091255`093 OF CHAR;
  143. X`009BYTE`009= `091BYTE`093 -128..127;
  144. X`009WORD`009= `091WORD`093 -32768..32767;
  145. X`009UBYTE`009= `091BYTE`093 0..255;
  146. X`009UWORD`009= `091WORD`093 0..65535;
  147. X`009UQUAD`009= RECORD
  148. X`009`009    a,b : unsigned
  149. X`009`009  END;
  150. X
  151. X`091ASYNCHRONOUS,EXTERNAL`093`009FUNCTION LIB$STOP
  152. X`009(
  153. X`009%REF`009STATUS`009: INTEGER := %IMMED 0
  154. X`009) : INTEGER; EXTERN;
  155. X
  156. X`091ASYNCHRONOUS,EXTERNAL`093`009FUNCTION LIB$GET_FOREIGN
  157. X`009(
  158. X`009%DESCR`009RESSTR`009: VARSTR  := %IMMED 0;
  159. X`009%DESCR`009PROMPT`009: VARSTR  := %IMMED 0;
  160. X`009%REF`009RESLEN`009: UWORD   := %IMMED 0;
  161. X`009%REF`009FLAGS`009: INTEGER := %IMMED 0
  162. X`009) : INTEGER; EXTERN;
  163. X
  164. X`091ASYNCHRONOUS,EXTERNAL`093`009FUNCTION LIB$GETJPI
  165. X`009(
  166. X`009%REF`009ITEM`009: UWORD   := %IMMED 0;
  167. X`009%REF`009PROCID`009: INTEGER := %IMMED 0;
  168. X`009%DESCR`009PROCNM`009: VARSTR  := %IMMED 0;
  169. X`009%REF`009RESNUM`009: INTEGER := %IMMED 0;
  170. X`009%DESCR`009RESSTR`009: VARSTR  := %IMMED 0;
  171. X`009%REF`009RESLEN`009: UWORD   := %IMMED 0
  172. X`009) : INTEGER; EXTERN;
  173. X
  174. X`091ASYNCHRONOUS,EXTERNAL`093`009FUNCTION LIB$SPAWN (
  175. X`009%DESCR`009COMMAN`009: VARSTR  := %IMMED 0;
  176. X`009%DESCR`009INFILE`009: VARSTR  := %IMMED 0;
  177. X`009%DESCR`009OUFILE`009: VARSTR  := %IMMED 0;
  178. X`009%REF`009FLAGS`009: INTEGER := %IMMED 0;
  179. X`009%DESCR`009PRNAME`009: VARSTR  := %IMMED 0;
  180. X`009%REF`009PROCID`009: INTEGER := %IMMED 0;
  181. X`009%REF`009COMPST`009: INTEGER := %IMMED 0;
  182. X`009%REF`009BIEFN`009: UBYTE   := %IMMED 0;
  183. X`009%REF`009CRAP_A`009: INTEGER := %IMMED 0;
  184. X`009%REF`009CRAP_B`009: INTEGER := %IMMED 0;
  185. X`009%DESCR`009PROMPT`009: VARSTR  := %IMMED 0;
  186. X`009%DESCR`009CLI`009: VARSTR  := %IMMED 0
  187. X`009) : INTEGER; EXTERN;
  188. X
  189. X`091ASYNCHRONOUS,EXTERNAL`093`009FUNCTION LIB$WAIT
  190. X`009(
  191. X`009%REF`009TIMETW`009: REAL    := %IMMED 0
  192. X`009) : INTEGER; EXTERN;
  193. X`032
  194. X`091ASYNCHRONOUS,EXTERNAL`093 FUNCTION SYS$ASSIGN
  195. X`009(
  196. X`009DEVNAM : `091CLASS_S`093 PACKED ARRAY `091$l1..$u1:INTEGER`093 OF CHAR;
  197. X`009VAR CHAN : `091VOLATILE`093 integer;
  198. X`009%IMMED ACMODE : UNSIGNED := %IMMED 0;
  199. X`009MBXNAM : `091CLASS_S`093 PACKED ARRAY `091$l4..$u4:INTEGER`093 OF CHAR :
  200. V= %IMMED 0
  201. X`009) : INTEGER; EXTERNAL;
  202. X
  203. X`091ASYNCHRONOUS,EXTERNAL`093 FUNCTION SYS$QIOW (
  204. X`009%IMMED EFN : UNSIGNED := %IMMED 0;
  205. X`009%IMMED CHAN : INTEGER;
  206. X`009%IMMED FUNC : INTEGER;
  207. X`009VAR IOSB : `091VOLATILE`093UQUAD := %IMMED 0;
  208. X`009%IMMED `091UNBOUND, ASYNCHRONOUS`093 PROCEDURE ASTADR := %IMMED 0;
  209. X`009%IMMED ASTPRM : UNSIGNED := %IMMED 0;
  210. X`009%REF P1 : `091UNSAFE`093 ARRAY `091$l7..$u7:INTEGER`093 OF UBYTE := %IMM
  211. VED 0;
  212. X`009%IMMED P2 : INTEGER := %IMMED 0;
  213. X`009%IMMED P3 : INTEGER := %IMMED 0;
  214. X`009%IMMED P4 : INTEGER := %IMMED 0;
  215. X`009%IMMED P5 : INTEGER := %IMMED 0;
  216. X`009%IMMED P6 : INTEGER := %IMMED 0) : INTEGER; EXTERNAL;
  217. X
  218. Xconst
  219. X  JPI$_USERNAME = 514;
  220. X  IO$_READVBLK = 49;
  221. X  IO$M_NOECHO = 64;
  222. X  IO$M_TIMED = 128;
  223. X  IO$M_PURGE = 2048;
  224. X  READFUNC = IO$_READVBLK + IO$M_NOECHO + IO$M_TIMED;
  225. X  WAITFUNC = IO$_READVBLK + IO$M_NOECHO + IO$M_PURGE;
  226. X
  227. Xprocedure makechan (var chan : integer);
  228. Xvar
  229. X  state : integer;
  230. Xbegin
  231. X  state := sys$assign ('TT',chan,,);
  232. X  if state<>1 then lib$stop(state);
  233. Xend;
  234. X
  235. Xprocedure readkey (var key, chan : integer);
  236. Xvar
  237. X  state : integer;
  238. X  inkey : char;
  239. Xbegin
  240. X  inkey := chr(0);
  241. X  state := sys$qiow (,chan,readfunc,,,,inkey,1,,,,);
  242. X  if state<>1 then lib$stop (state);
  243. X  key := ord(inkey);
  244. Xend;
  245. X
  246. Xprocedure waitkey (var key, chan : integer);
  247. Xvar
  248. X  state : integer;
  249. X  inkey : char;
  250. Xbegin
  251. X  inkey := chr(0);
  252. X  state := sys$qiow (,chan,waitfunc,,,,inkey,1,,,,);
  253. X  if state<>1 then lib$stop (state);
  254. X  key := ord(inkey);
  255. Xend;
  256. X
  257. Xprocedure spawn;
  258. Xbegin
  259. X  lib$spawn (,,,,'Shapes_Refugee',,,,,,,);
  260. Xend;
  261. X
  262. Xprocedure param (var word : USRSTR);
  263. Xvar
  264. X  count : integer;
  265. X  tempstr : varstr;
  266. Xbegin
  267. X  lib$get_foreign (tempstr);
  268. X  if length(tempstr)<5 then tempstr := pad(tempstr,' ',5);
  269. X  for count := 1 to 5 do word`091count`093 := tempstr`091count`093;
  270. Xend;
  271. X
  272. Xprocedure usernum (var userid : string);
  273. Xvar
  274. X  count : integer;
  275. X  tempstr : varstr;
  276. Xbegin
  277. X  lib$getjpi (JPI$_USERNAME,,,,tempstr,);
  278. X  if length(tempstr) < 8 then tempstr := pad(tempstr,' ',8);
  279. X  for count := 1 to 8 do userid`091count`093 := tempstr`091count`093;
  280. Xend;
  281. X
  282. Xprocedure waitx (time : real);
  283. Xbegin
  284. X  lib$wait (time);
  285. Xend;
  286. X
  287. X`123*** THESE ROUTINES REPLACE RAND.FOR ***`125
  288. X
  289. X`091ASYNCHRONOUS,EXTERNAL`093 FUNCTION LIB$DATE_TIME
  290. X`009(
  291. X`009%DESCR DATIM : VARSTR
  292. X`009) : UWORD; EXTERNAL;
  293. X
  294. Xvar `123GLOBAL!`125
  295. X  seed : integer;
  296. X
  297. XPROCEDURE RANDOMISE;
  298. Xvar
  299. X  date : VARSTR;
  300. XBEGIN
  301. X  LIB$DATE_TIME (date);
  302. X  seed := 10000*(ord(date`09116`093)-ord('0'))
  303. X`009 + 1000*(ord(date`09117`093)-ord('0'))
  304. X`009 +  100*(ord(date`09119`093)-ord('0'))
  305. X`009 +   10*(ord(date`09120`093)-ord('0'))
  306. X`009 +      (ord(date`09122`093)-ord('0'))
  307. Xend;
  308. X
  309. Xfunction random (min,max : integer) : integer;
  310. Xvar
  311. X  rnd : real;
  312. X  realseed : integer;
  313. Xbegin
  314. X  seed := INT(UAND((((seed+1)*75)-1),65535));
  315. X  realseed := seed;
  316. X  rnd := (realseed/65536)*(max-min)+min;
  317. X  random := round(rnd);
  318. Xend;
  319. X
  320. X`123* END OF PASCAL REPLACEMENT *`125
  321. $ CALL UNPACK SORT_SHAPES.PAS;1 420053111
  322. $ create/nolog 'f'
  323. XWell... after the complaint about SHAPES being in PASCAL,C AND FORTRAN,
  324. XI decided to convert it into pure PASCAL.
  325. X
  326. XWhat (dis-?) advantages this may have, I have no idea....
  327. X
  328. XThe mod is very simple, and uses the EDT editor to replace some lines in
  329. Xthe SHAPES.PAS file...
  330. X
  331. X***WARNING***
  332. X
  333. XThe SHAPES.PAS file **MUST** be in the original format that it is in
  334. Ximmeadiatley after it has been decoded from the SHAR file
  335. X
  336. XTo convert the program simply type @SORT_SHAPES
  337. X
  338. XThe files SHAPES.PAS, SORT_SHAPES.EDT, SORT_SHAPES.COM and SORT_SHAPES.PAS
  339. Xmust be in the current directory for this to work......
  340. $ CALL UNPACK SORT_SHAPES.TXT;2 2052529465
  341. $ v=f$verify(v)
  342. $ EXIT
  343.